import cv2 import numpy as np import mapper image=cv2.imread("test_img.jpg") #read in the image image=cv2.resize(image,(1300,800)) #resizing because opencv does not work well with bigger images orig=image.copy() gray=cv2.cvtColor(image,cv2.COLOR_BGR2GRAY) #RGB To Gray Scale cv2.imshow("Title",gray) blurred=cv2.GaussianBlur(gray,(5,5),0) #(5,5) is the kernel size and 0 is sigma that determines the amount of blur cv2.imshow("Blur",blurred) edged=cv2.Canny(blurred,30,50) #30 MinThreshold and 50 is the MaxThreshold cv2.imshow("Canny",edged) contours,hierarchy=cv2.findContours(edged,cv2.RETR_LIST,cv2.CHAIN_APPROX_SIMPLE) #retrieve the contours as a list, with simple apprximation model contours=sorted(contours,key=cv2.contourArea,reverse=True) #the loop extracts the boundary contours of the page for c in contours: p=cv2.arcLength(c,True) approx=cv2.approxPolyDP(c,0.02*p,True) if len(approx)==4: target=approx break approx=mapper.mapp(target) #find endpoints of the sheet pts=np.float32([[0,0],[800,0],[800,800],[0,800]]) #map to 800*800 target window op=cv2.getPerspectiveTransform(approx,pts) #get the top or bird eye view effect dst=cv2.warpPerspective(orig,op,(800,800)) cv2.imshow("Scanned",dst) # press q or Esc to close cv2.waitKey(0) cv2.destroyAllWindows()