Python代码统计1的个数本该输出1却返回长数值列表求助
问题根源
- 你当前的统计逻辑和打印位置都存在错误:
- 你把
print(D5)放在了for循环内部,每执行一次循环就会打印当前单次的判断结果,所以会输出179条独立的值 - 你没有在循环外定义全局计数器来累计所有循环中1的出现次数,每次循环内计算的
D5仅代表当前旋转角度下的匹配结果是否为1,自然无法得到所有运算结果里1的总个数
- 你把
- 冗余操作说明:
D3本身就是单个整数,你将其转为numpy数组再调用sum()是不必要的操作,直接判断D3 == 1即可得到布尔结果,累加时布尔值True会自动按1计算、False自动按0计算,不需要额外转换。
修正后可实现需求的代码
# 循环外先初始化统计1的总个数的计数器 count_ones = 0 for i in range(0, 179): imgr = ndimage.rotate(img, i) start_row, start_col = int(0), int(0) end_row, end_col = int(Y), int(width) cropped_top = imgr[start_row:end_row , start_col:end_col] start_row, start_col = int(Y), int(0) end_row, end_col = int(height), int(width) cropped_bot = imgr[start_row:end_row , start_col:end_col] D1 = cv2.matchShapes(cropped_top, cropped_bot, cv2.CONTOURS_MATCH_I2, 0) D2 = D1*100 D3 = math.ceil(D2) # 满足条件就累加计数器 if D3 == 1: count_ones += 1 # 循环全部执行结束后再打印总个数 print(count_ones)
内容的提问来源于stack exchange,提问作者Andrew
相关产品推荐
相关产品推荐

