首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >opencv绘制矩形函数在C++、python中的行为不同

opencv绘制矩形函数在C++、python中的行为不同
EN

Stack Overflow用户
提问于 2020-07-19 11:57:06
回答 2查看 541关注 0票数 2

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

C++ cv::Rectangle函数输出

Python cv2.rectangle方法输出,

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-07-19 14:46:49

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

代码语言:javascript
复制
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)值相加,

代码语言:javascript
复制
c1, c2 = (x ,y), ((x+w_offset), (y+h_offset))
cv2.rectangle(img, c1, c2, (0, 255, 0), thickness=2, lineType=cv2.LINE_AA)
票数 3
EN

Stack Overflow用户

发布于 2022-03-27 00:30:29

记录在案。我面临着同样的问题,解决方案是使用Scaler(0,255,255),我使用了错误的值。

代码语言:javascript
复制
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); 
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62979959

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档