首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >cv2.cv.BoxPoints(rect)返回什么?

cv2.cv.BoxPoints(rect)返回什么?
EN

Stack Overflow用户
提问于 2015-04-20 12:35:48
回答 6查看 29.8K关注 0票数 8
代码语言:javascript
复制
rect = cv2.minAreaRect(largest_contour)
rect = ((rect[0][0] * self.scale_down, rect[0][1] * self.scale_down), (rect[1][0] * self.scale_down, rect[1][1] * self.scale_down), rect[2])
box = cv2.cv.BoxPoints(rect)
print box 
box = np.int0(box)
cv2.drawContours(frame,[box], 0, (0, 0, 255), 2)

这就是我的代码的样子。我试着打印这个盒子,看看是什么,我得到了一些打印结果,比如((200.0, 472.0), (200.0, 228.0), (420.0, 228.0), (420.0, 472.0))。它应该和x和y坐标有关,对吧?我猜那是长方形的四个角吧?那么它们到底是什么呢?谢谢!

EN

回答 6

Stack Overflow用户

发布于 2019-10-01 21:06:26

对"box“值的常见误解是,"box”ndarray的第一个子列表总是矩形的左下角。例如,在下面显示的矩形中,"box“ndarray的第一个子列表不需要总是表示点A。

下面是"box“值所代表的内容:

正如问题正确指出的那样,当您打印框时,您将得到一个类似于以下内容的ndarray:

然后我做了额外的描述,并编写了这个简单的for循环来真正理解"box“值实际上代表的是什么:

代码语言:javascript
复制
for i in box:
    cv2.circle(image,(i[0],i[1]), 3, (0,255,0), -1)
    imgplot = plt.imshow(image)
    plt.show()

结果是:(图像按顺序排列)

我认为这些图片应该已经消除了任何人对"box“值的疑虑,但不管怎样,这里是一个总结:

矩形的最低点(左或右无关紧要)将始终是"box“ndarray的第一个子列表。所以在我给出的例子中,第一个子列表169144表示“this rectangle的右下角”。现在,这一点将成为决定下一个子列表代表什么的参考点。这意味着,下一个子列表将始终表示当您按顺时针方向移动时第一个获得的点。(如for循环的第二个图像所示)

并继续顺时针方向移动,看看下一个子列表代表什么。

PS:有时很难阅读OpenCV文档(顺便说一句,这不是世界上最好的文档)并正确理解函数及其返回值。因此,我建议使用一些小代码块,比如上面的for循环和cv2.circle,以便真正可视化函数的返回值。这应该会消除您对OpenCV中遇到的任何函数的所有疑虑。毕竟,OpenCV就是关于“可视化”的!

票数 23
EN

Stack Overflow用户

发布于 2015-04-20 12:58:58

这些是定义提供给它的旋转矩形的4个点。请记住,在opencv中,点被绘制为(x,y)而不是(行,列),并且y轴是正向下的。因此,第一个点将绘制在图像左侧右侧200像素处,距图像顶部472像素处。换句话说,第一个点是图像的左下角。

票数 8
EN

Stack Overflow用户

发布于 2018-08-21 23:42:13

我认为第一个点将始终是最底部的点,实际上它将是右下角(如果有多个点,则可能是最底部的点)。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29739411

复制
相关文章

相似问题

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