I have the following image. I want to detect and perspective transform the rectangular whiteboard.
I want to detect these 4 boundaries/corners and apply a perspective transformation to it. Have a look at the below image:
I am not able to detect the boundaries of the rectangle. Here's what I have tried:
import cv2, os import numpy as np from google.colab.patches import cv2_imshow image = cv2.imread("img.jpg") orig1 = image.copy() # 1) Grayscale image gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) # cv2_imshow(gray) # 2) Erosion kernel = np.ones((5, 5), np.uint8) erosion = cv2.erode(gray, kernel, iterations = 1) # cv2_imshow(erosion) # 3) Thresholding (OTSU) blur = cv2.GaussianBlur(erosion, (5,5),0) ret3, thresh = cv2.threshold(blur,0,255,cv2.THRESH_BINARY+cv2.THRESH_OTSU) # cv2_imshow(thresh) # 4) Contours copy = thresh; orig = image; cnts = cv2.findContours(copy, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE) cnts = cnts[0] if len(cnts) == 2 else cnts[1] area = -1; c1 = 0 for c in cnts: if area < cv2.contourArea(c): area = cv2.contourArea(c) c1 = c cv2.drawContours(orig,[c1], 0, (0,255,0), 3) epsilon = 0.09 * cv2.arcLength(c1,True) approx = cv2.approxPolyDP(c1,epsilon,True) if len(approx) != 4: # Then it will fail here. pass cood = [] for i in range(0, len(approx)): cood.append([approx[i][0][0], approx[i][0][1]]) # 5) Perspective Transformation def reorder(myPoints): myPoints = np.array(myPoints).reshape((4, 2)) myPointsNew = np.zeros((4, 1, 2), dtype=np.int32) add = myPoints.sum(1) myPointsNew[0] = myPoints[np.argmin(add)] myPointsNew[3] =myPoints[np.argmax(add)] diff = np.diff(myPoints, axis=1) myPointsNew[1] =myPoints[np.argmin(diff)] myPointsNew[2] = myPoints[np.argmax(diff)] return myPointsNew pts1 = np.float32(reorder(cood)) w = 1000; h = 1000; m1 = 1000; m2 = 1000 pts2 = np.float32([[0, 0], [w, 0], [0, h], [w, h]]) matrix = cv2.getPerspectiveTransform(pts1, pts2) result = cv2.warpPerspective(orig1, matrix, (m1, m2)) cv2_imshow(result) I have also gone through Microsoft's research, but not sure how to implement it. I am not able to detect and perspective transform the board. It would be great if anyone of you can help me out. Also, do let me know if my question requires more details.



