【问题标题】:opencv draw rectangle function behaves different in C++ , pythonopencv 绘制矩形函数在 C++ 和 python 中的行为不同
【发布时间】:2020-11-08 19:03:19
【问题描述】:

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

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

Python cv2.rectangle 方法输出,

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

【问题讨论】:

  • 看起来第二张图片将高度和宽度值解释为坐标。
  • 能否请您详细说明,更多
  • 你能打印原始的(x1, y1)(x2, y2)。查看结果,您的(x1, y1) 是正确的,但(x2, y2) 已损坏且为负数。你能分享你的绘图代码吗?
  • @MilindDeore,我已经在单独的问题中指出了这个问题,请查看它,stackoverflow.com/q/62956474/1632479

标签: python c++ opencv


【解决方案1】:

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

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

cv::rectangle 函数的 c++ 实现在内部管理偏移值以及相应的结束 (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)

【讨论】:

    猜你喜欢
    • 2018-12-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-30
    • 1970-01-01
    • 2020-04-07
    • 1970-01-01
    相关资源
    最近更新 更多