有这么一段代码
for cls, (x1, y1, x2, y2), conf in pred:
cls, (x1, y1, x2, y2), conf = pred[fcount]
if CheckBlackPercent(img_only_paster, (x1, y1, x2, y2)):
# 将识别结果放到只有贴纸的图片中进行黑色像素占比判断,要是黑色占比多则说明是实物
# 要是占比少则是贴纸,不放入最后的识别框,也不加入最后的输出文档结果
del pred[detCount]
# fcount -= 1
continue
# print(names[cls], x1, y1, x2, y2, conf) # 识别物体种类、左上角x坐标、左上角y轴坐标、右下角x轴坐标、右下角y轴坐标,置信度
temp_namelist.append(names[cls])
outputString_withConf += f"ID: {names[cls][0:5]},name:{names[cls][5:]},conf:{conf}\n " # add to string
cv2.rectangle(img, (x1, y1), (x2, y2), (0, 255, 0))
cv2.putText(img, names[cls], (x1, y1 - 20), cv2.FONT_HERSHEY_DUPLEX, 0.2, (255, 0, 0))
detCount += 1
fcount += 1
我希望能够修改fcount循环变量,但是在代码运行过程中,通过debug断点调试,发现fcount并没有按照我所预想的进行改变:我希望我的fcount在for循环体+1后,在for循环头之后在原先+1的基础上继续+1。但实际上并没有,fcount在for循环头上并没有记录在循环体中+1。
搜寻资料才发现,python中无法在for循环中修改循环变量。
但是fcount在循环体中的值是可以被改变的。
参考资料:python for循环修改循环变量问题_5789113的博客-CSDN博客_python循环函数改变变量
对此,只需要把for修改为while即可
# for cls, (x1, y1, x2, y2), conf in pred:
while fcount < len(pred):
cls, (x1, y1, x2, y2), conf = pred[fcount]
if CheckBlackPercent(img_only_paster, (x1, y1, x2, y2)):
# 将识别结果放到只有贴纸的图片中进行黑色像素占比判断,要是黑色占比多则说明是实物
# 要是占比少则是贴纸,不放入最后的识别框,也不加入最后的输出文档结果
del pred[detCount]
# fcount -= 1
continue
# print(names[cls], x1, y1, x2, y2, conf) # 识别物体种类、左上角x坐标、左上角y轴坐标、右下角x轴坐标、右下角y轴坐标,置信度
temp_namelist.append(names[cls])
outputString_withConf += f"ID: {names[cls][0:5]},name:{names[cls][5:]},conf:{conf}\n " # add to string
cv2.rectangle(img, (x1, y1), (x2, y2), (0, 255, 0))
cv2.putText(img, names[cls], (x1, y1 - 20), cv2.FONT_HERSHEY_DUPLEX, 0.2, (255, 0, 0))
detCount += 1
fcount += 1