我有一个OpenCV轮廓c
,它的形状接近四边形,但它可以有4到几十个点的倍数。
我想找到最接近轮廓c
的四边形q
(一种方法可以是最小化它们之间的差异)。
我目前使用
q = cv2.approxPolyDP(c, 0.02 * cv2.arcLength(c, True), closed=True)
字符串
但结果是不总是一个四边形。我已经尝试过像cv2.approxPolyDP() , cv2.arcLength() How these works和How to force approxPolyDP() to return only the best 4 corners? - Opencv 2.4.2中的技术(例如二分搜索),但它并不总是产生一个四边形。
是否有其他方法(可能使用approxPolyDP
以外的其他方法?)来找到轮廓的最佳四边形近似?
注意:另一个链接的问题是Crop image based on largest quadrilateral contour OpenCV,但它没有给予这个问题的解决方案。
1条答案
按热度按时间mfuanj7w1#
我最近遇到了一个类似的问题,但是我没有用一般的四边形来近似轮廓,而是试图用矩形来近似轮廓。我希望我的解决方案对你的问题也有帮助。
我使用了cv.minAreaRect方法。这个方法找到了一组具有最小面积的点的封闭
Rotated Rectangle
。在python opencv中,Rotated Rectangle
是由(center_x, center_y), (width, height), angle_in_degrees
构建的。我建议你检查this link,以避免对返回的angle_in_degrees
值产生混淆,并获得有关“minAreaRect”方法的更多有用信息。下面是“minAreaRect”方法的一个简单用法示例:
字符串
在我的例子中,我有接近矩形的轮廓,
minAreaRect()
返回了不错的近似值。希望它对你也一样。