首页 > 解决方案 > opencv 绘制矩形函数在 C++ 和 python 中的行为不同

问题描述

我从 C++ 中的 Yolo 实现中获取边界框,检测到的边界框使用cv::RectangleC++ 中的函数正确绘制,但是当在 python 中绘制相同的边界框坐标时,它错误地定位对象,

C++cv::Rectangle函数输出,

具有正确边界框的 C++ 图像渲染

Pythoncv2.rectangle方法输出,

带有错误边界框的python图像渲染

我还确保输入图像的纵横比对于 python 和 C++ 是相同的,为了在 python 中利用(绘制)检测到的有界框,我首先将它从 c++ 检测模块(yolo)转储到 json 文件,然后在单独的 python 脚本中读取和渲染只是为了渲染图像和显示边界框 cv2.Rectangle

标签: pythonc++opencv

解决方案


我得出的结论是,cv::Rectangle函数采用宽度和高度参数的偏移值,所以假设

rect = cv::Rect(x,y,w_offset,h_offset)
cv::rectangle(img, rect, cv::Scalar(0x27, 0xC1, 0x36), 2);

函数的 c++ 实现在cv::rectangle内部管理偏移值以及相应的结束 (x,y) 边界框坐标,但对于基于 python 的实现,偏移值需要明确地与边界框的起始 (x,y) 值相加,

c1, c2 = (x ,y), ((x+w_offset), (y+h_offset))
cv2.rectangle(img, c1, c2, (0, 255, 0), thickness=2, lineType=cv2.LINE_AA)

推荐阅读