Python循环绘图问题:同图多次cv2.rectangle仅显示单个矩形
问题解决:多重复区域仅绘制单个矩形的问题
问题描述
需要在原始图像上为每个重复区域绘制矩形标记,但实际输出图像始终只有一个矩形,怀疑代码第25行的elif len(list_for_duplicate_x_and_y) < 1:存在问题。
代码问题分析
你的代码存在多处逻辑错误,导致无法正确绘制多个矩形:
- 无效的条件判断:
len(list_for_duplicate_x_and_y) < 0永远不会成立(列表长度不可能为负数);elif len(list_for_duplicate_x_and_y) < 1等价于长度为0,和外层的len == 0重复,且逻辑完全不符合“多个重复项”的场景。 - 循环内重复读取原图:每次循环都重新读取原始图像
original_duplicate.png,导致之前绘制的矩形被覆盖,最终只保留最后一次绘制的结果。 - 手动修改循环变量:
k +=1会干扰for k in range(...)的正常迭代,导致跳过部分重复项。 - 嵌套条件逻辑混乱:内部的
if/elif嵌套层级错误,多个重复项的绘制逻辑完全无法触发。
修正后的代码
# 先一次性读取原始图像,避免重复读取覆盖之前的绘制 img = cv2.imread("/home/student_DC/desktop/optimization_11_10/original_duplicate.png") duplicate_count = len(list_for_duplicate_x_and_y) if duplicate_count == 0: print("ok no duplicate") else: # 遍历每个重复区域的坐标 for duplicate_xy in list_for_duplicate_x_and_y: duplicate_x = duplicate_xy[0] - 28 duplicate_y = duplicate_xy[1] - 54 # 在同一张图像上绘制矩形 cv2.rectangle(img, (duplicate_x, duplicate_y), (duplicate_x + 92, duplicate_y + 82), (0, 255, 5), 5) # 所有矩形绘制完成后,一次性保存图像 cv2.imwrite("/home/student_DC/desktop/optimization_11_10/original_duplicate_output.png", img)
修正说明
- 提前读取图像:只读取一次原始图像,所有矩形都绘制在这张图上,避免覆盖。
- 简化循环逻辑:直接遍历
list_for_duplicate_x_and_y中的每个坐标,无需手动操作循环变量。 - 统一坐标计算:将坐标偏移计算合并,避免重复代码。
- 一次性保存结果:所有矩形绘制完成后再保存图像,确保所有标记都被保留。
内容的提问来源于stack exchange,提问作者user20396381
相关产品推荐
相关产品推荐

