OpenCV按坐标绘制矩形出现重叠问题,如何解决?
搞定OpenCV矩形绘制重叠问题!
嘿,你遇到的矩形错乱重叠问题,根源其实是cv2.rectangle的坐标参数传错啦😉
问题出在哪?
OpenCV画矩形的函数要求传入左上角坐标和右下角坐标,格式是:
cv2.rectangle(图像, (左上角x, 左上角y), (右下角x, 右下角y), 颜色, 线宽)
但你的代码里把(xmin, xmax)当左上角,(ymin, ymax)当右下角——这完全搞混了x和y的对应关系!本来应该是(xmin, ymin)对应左上角,(xmax, ymax)对应右下角,坐标一乱,矩形自然就画错位置了。
修正后的代码
直接改对坐标参数就行,顺便给你优化了下代码逻辑:
import cv2 import os # 你的坐标列表 points = [(1707.0, 1865.0, 2331.0, 2549.0),(1348.0, 1004.0, 1987.0, 1746.0),(749.0, 2129.0, 1674.0, 2939.0) ,(25.0, 1134.0, 1266.0, 2108.0),(253.0, 1731.0, 1403.0, 2449.0)] # 读取图像 image = cv2.imread("pathtoimage") # 遍历每个矩形坐标 for xmin, ymin, xmax, ymax in points: # 正确传入左上角和右下角坐标 cv2.rectangle(image, (int(xmin), int(ymin)), (int(xmax), int(ymax)), (0,255,0), 8) # 保存结果(先删旧文件再写入,避免缓存问题) output_path = "/home/atul/Documents/CarLabel/imagemapping1-wp-BD489663-BD55-484E-9EA7-EB5662B626B9.png" if os.path.exists(output_path): os.remove(output_path) cv2.imwrite(output_path, image)
小提示
cv2.rectangle是直接在原图像上修改的,不需要每次都赋值给result_image,除非你想保留原图备份(那就在开头加result_image = image.copy(),然后用result_image来画矩形)。- 可以加个小检查,确保
xmin < xmax和ymin < ymax,防止坐标顺序颠倒导致的奇怪问题。
对比图
原始图像

错误绘制结果

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




