OpenCV C++/Obj-C: Detecting a sheet of paper / Square Detection

前端 未结 6 1251
离开以前
离开以前 2020-11-22 01:47

I successfully implemented the OpenCV square-detection example in my test application, but now need to filter the output, because it\'s quite messy - or is my code wrong?

6条回答
  •  一个人的身影
    2020-11-22 02:28

    Once you have detected the bounding box of the document, you can perform a four-point perspective transform to obtain a top-down birds eye view of the image. This will fix the skew and isolate only the desired object.


    Input image:

    Detected text object

    Top-down view of text document

    Code

    from imutils.perspective import four_point_transform
    import cv2
    import numpy
    
    # Load image, grayscale, Gaussian blur, Otsu's threshold
    image = cv2.imread("1.png")
    gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
    blur = cv2.GaussianBlur(gray, (7,7), 0)
    thresh = cv2.threshold(blur, 0, 255, cv2.THRESH_BINARY + cv2.THRESH_OTSU)[1]
    
    # Find contours and sort for largest contour
    cnts = cv2.findContours(thresh, cv2.RETR_EXTERNAL,cv2.CHAIN_APPROX_SIMPLE)
    cnts = cnts[0] if len(cnts) == 2 else cnts[1]
    cnts = sorted(cnts, key=cv2.contourArea, reverse=True)
    displayCnt = None
    
    for c in cnts:
        # Perform contour approximation
        peri = cv2.arcLength(c, True)
        approx = cv2.approxPolyDP(c, 0.02 * peri, True)
        if len(approx) == 4:
            displayCnt = approx
            break
    
    # Obtain birds' eye view of image
    warped = four_point_transform(image, displayCnt.reshape(4, 2))
    
    cv2.imshow("thresh", thresh)
    cv2.imshow("warped", warped)
    cv2.imshow("image", image)
    cv2.waitKey()
    

提交回复
热议问题