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

Python cv2.rectangle方法输出,

我还确保了对于python和C++、输入的图像的纵横比是相同的,为了使用(绘制)在python中检测到的有界框,我首先将其从c++检测模块(Yolo)中转储到json文件中,然后在单独的python脚本中读取和呈现,以便使用 cv2.Rectangle呈现图像和显示边框。
发布于 2020-07-19 14:46:49
我得出的结论是,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)发布于 2022-03-27 00:30:29
记录在案。我面临着同样的问题,解决方案是使用Scaler(0,255,255),我使用了错误的值。
bbox_2d = cv::selectROI(frame, false);
// Display bounding box.
cv::rectangle(frame, bbox_2d, cv::Scalar( 0,255,255 ), 2, 1 );
cv::imshow("Tracking", frame); https://stackoverflow.com/questions/62979959
复制相似问题