Skip to content Skip to sidebar Skip to footer

How To Find The Document Edges In Various Coloured Backgrounds Using Opencv Python? [document Scanning In Various Backgrounds]

I am currently have a document that needs to be smart scanned. For that, I need to find proper contours of the document in any background so that I can do a warped perspective proj

Solution 1:

Following code might help you to detect/segment the page in the image...

import cv2
import matplotlib.pyplot as plt
import numpy as np
image = cv2.imread('test_p.jpg')
image = cv2.imread('test_p.jpg')
print(image.shape)
ori = image.copy()
image = cv2.resize(image, (image.shape[1]//10,image.shape[0]//10))

Resized the image to make the operations more faster so that we can work on realtime..

gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
gray = cv2.GaussianBlur(gray, (11,11), 0)
edged = cv2.Canny(gray, 75, 200)
print("STEP 1: Edge Detection")
plt.imshow(edged)
plt.show()
cnts = cv2.findContours(edged.copy(), cv2.RETR_LIST, cv2.CHAIN_APPROX_SIMPLE)
cnts = sorted(cnts[1], key = cv2.contourArea, reverse = True)[:5]

Here we will consider only first 5 contours from the sorted list based on area Here the size of the gaussian blur is bit sensitive, so chose it accordingly based on the image size. After the above operations image may look like..

Image with Edges

for c in cnts:
    ### Approximating the contour#Calculates a contour perimeter or a curve length
    peri = cv2.arcLength(c, True)
    approx = cv2.approxPolyDP(c, 0.01 * peri, True)
    # if our approximated contour has four points, then we# can assume that we have found our screen
    screenCnt = approx
    iflen(approx) == 4:
        screenCnt = approx
        break# show the contour (outline) print("STEP 2: Finding Boundary")
cv2.drawContours(image, [screenCnt], -1, (0, 255, 0), 2)
image_e = cv2.resize(image,(image.shape[1],image.shape[0]))
cv2.imwrite('image_edge.jpg',image_e)
plt.imshow(image_e)
plt.show()

Final Image may look like...

Rest of the things may be handled after getting the final image...

Code Reference :- Git Repository

I guess this answer would be helpful...

Solution 2:

There is a similar problem which is called orthographic projection.

Orthographic approaches

Rather than doing, Gaussian blur+morphological operation to get the edge of the document, try to do orthographic projection first and then find contours via your method.

For fining proper bounding box, try some preset values or a reference letter after which an orthographic projection will allow you to compute the height and hence the dimensions of the bounding box.

Post a Comment for "How To Find The Document Edges In Various Coloured Backgrounds Using Opencv Python? [document Scanning In Various Backgrounds]"