python - opencv 绘制矩形函数在 C++ 和 python 中的行为不同
问题描述
我从 C++ 中的 Yolo 实现中获取边界框,检测到的边界框使用cv::Rectangle
C++ 中的函数正确绘制,但是当在 python 中绘制相同的边界框坐标时,它错误地定位对象,
C++cv::Rectangle
函数输出,
Pythoncv2.rectangle
方法输出,
我还确保输入图像的纵横比对于 python 和 C++ 是相同的,为了在 python 中利用(绘制)检测到的有界框,我首先将它从 c++ 检测模块(yolo)转储到 json 文件,然后在单独的 python 脚本中读取和渲染只是为了渲染图像和显示边界框 cv2.Rectangle
解决方案
我得出的结论是,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)
推荐阅读
- node.js - 即使安装了 cors nom 软件包,也会出现 CORS 错误
- powershell - 从 Powershell 中的多个下拉列表中返回多个值
- google-apps-script - 查询日历事件列表中组织者电子邮件地址的文本
- reactjs - React 中的身份验证
- python - 在 python-docx 的同一行中添加两个图像
- excel - 运行时错误“91”对象变量或未设置块变量在早期工作
- angular - 第一次尝试时未显示数据
- uwp - 如何导航到 UWP 页面的实例?
- perl - 为什么官方的 perl docker 镜像有两个版本的 perl?
- reactjs - 带有钩子的 React 函数组件计数器