You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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)

修正说明

  1. 提前读取图像:只读取一次原始图像,所有矩形都绘制在这张图上,避免覆盖。
  2. 简化循环逻辑:直接遍历list_for_duplicate_x_and_y中的每个坐标,无需手动操作循环变量。
  3. 统一坐标计算:将坐标偏移计算合并,避免重复代码。
  4. 一次性保存结果:所有矩形绘制完成后再保存图像,确保所有标记都被保留。

内容的提问来源于stack exchange,提问作者user20396381

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 03:55:12