如何使用OpenCV从图像中检测矩形或五边形?我有很多名片的图片,我必须检测出他们的sides.The名片实际上是长方形的,但有时名片的角部是裁剪的。我尝试过HoughLinesP()
函数,但它只是查找行。
我必须检测图片上方的形状,这意味着我需要检测名片边缘,而不管该形状是矩形还是五边形,并且只需要从图像中裁剪名片对象。
预期结果:
发布于 2016-06-08 08:38:31
您可以按照以下步骤操作:
findContours
.approxPoly
查找图像中的轮廓,以获得图像中所有轮廓的多边形形状。如果边数为4 => Rectangle
如果边数为5 => Pentagon
代码是用python编写的,但应该很容易转换为C++:
import cv2
gray = cv2.imread('img.png',0)
ret,thresh = cv2.threshold(gray,127,255,1)
contours,h = cv2.findContours(thresh,1,2)
for cnt in contours:
approx = cv2.approxPolyDP(cnt,0.01*cv2.arcLength(cnt,True),True)
if len(approx)==5:
print "pentagon"
elif len(approx)==4:
print "rectangle"
发布于 2016-06-08 19:08:14
您可以尝试使用MatchShapes函数。
Here is an example。
我还发现了一个实现类似于@Dr.Haimovitz建议的方法的教程: It's here。
https://stackoverflow.com/questions/37691479
复制相似问题