gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 21:55:46 27 4
gpt4 key购买 nike

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 坐标有关吗?我猜那是矩形的四个角?那么它们到底是什么?谢谢!

最佳答案

“盒子”值的常见误解是“盒子”ndarray 的第一个子列表始终是矩形的左下角点。例如,在下图所示的矩形中,“box”ndarray 的第一个子列表不必始终代表点 A。

rectangle

所以这是“框”值代表的内容:

正如问题正确指出的那样,当你打印 box 时,你会得到一个看起来像这样的 ndarray:

enter image description here

然后我更深入地描述并编写了这个简单的 for 循环以真正理解“框”值实际代表什么:

for i in box:
cv2.circle(image,(i[0],i[1]), 3, (0,255,0), -1)
imgplot = plt.imshow(image)
plt.show()

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

first image

enter image description here

enter image description here

enter image description here

我认为图像应该已经消除了任何人对“框”值的怀疑,但无论如何这里是一个总结:

矩形的最低点(无论是左还是右)将始终是“框”ndarray 的第一个子列表。因此,在我给出的示例中,第一个子列表 [169 144] 表示“this 矩形的右下角”。现在这一点将成为决定下一个子列表代表什么的引用点。意思是,下一个子列表将始终表示您在顺时针方向 移动时首先得到的点。 (如for循环第二张图所示)

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

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

关于python - cv2.cv.BoxPoints(rect) 返回什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29739411/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com