OpenCV - 检测矩形或五边形

时间:2016-06-08 00:23:02

标签: c++ opencv image-processing opencv3.0

如何使用OpenCV从图像中检测矩形或五边形?我有名片的照片,我必须检测它们。我尝试了HoughLinesP()功能,但它只是找到了一行。

我必须检测图片上方的形状并扩展图像以显示矩形的交叉点。

3 个答案:

答案 0 :(得分:1)

您可以按照以下步骤操作:

  1. 使用findContours

  2. 查找图像中的轮廓
  3. 执行approxPoly以获取图像中存在的所有轮廓的多边形形状。

  4. 检查近似轮廓尺寸(多边形中的边数):

    如果边数是 4 =>矩形

    如果边数是 5 =>五边形

  5. 代码在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"
    

答案 1 :(得分:0)

您可以尝试使用MatchShapes功能。

Here is an example

我还发现了一个教程,实现了类似@H.Haimovitz建议的方法: 这是here

答案 2 :(得分:0)

关于如何检测图像中的矩形的很好的例子。检查此link