From 69116f6ba7025c806038780bfde02fddd56b5148 Mon Sep 17 00:00:00 2001 From: Sourav Sharma Date: Sat, 19 Dec 2020 22:30:29 +0530 Subject: [PATCH 1/2] added file for aligalignment --- image_align_scan.py | 100 ++++++++++++++++++++++++++++++++++++++++++++ img3.jpg | Bin 0 -> 40447 bytes 2 files changed, 100 insertions(+) create mode 100644 image_align_scan.py create mode 100644 img3.jpg diff --git a/image_align_scan.py b/image_align_scan.py new file mode 100644 index 0000000..5cdcb03 --- /dev/null +++ b/image_align_scan.py @@ -0,0 +1,100 @@ +from skimage.filters import threshold_local +import numpy as np +import argparse +import cv2 +import imutils + + + +ap = argparse.ArgumentParser() +ap.add_argument("-i", "--image", required = True) +args = vars(ap.parse_args()) + + + +def order_points(pts): + rect = np.zeros((4, 2), dtype = "float32") + s = pts.sum(axis = 1) + rect[0] = pts[np.argmin(s)] + rect[2] = pts[np.argmax(s)] + diff = np.diff(pts, axis = 1) + rect[1] = pts[np.argmin(diff)] + rect[3] = pts[np.argmax(diff)] + return rect + + + +def four_point_transform(image, pts): + rect = order_points(pts) + (tl, tr, br, bl) = rect + widthA = np.sqrt(((br[0] - bl[0]) ** 2) + ((br[1] - bl[1]) ** 2)) + widthB = np.sqrt(((tr[0] - tl[0]) ** 2) + ((tr[1] - tl[1]) ** 2)) + maxWidth = max(int(widthA), int(widthB)) + heightA = np.sqrt(((tr[0] - br[0]) ** 2) + ((tr[1] - br[1]) ** 2)) + heightB = np.sqrt(((tl[0] - bl[0]) ** 2) + ((tl[1] - bl[1]) ** 2)) + maxHeight = max(int(heightA), int(heightB)) + dst = np.array([ + [0, 0], + [maxWidth - 1, 0], + [maxWidth - 1, maxHeight - 1], + [0, maxHeight - 1]], dtype = "float32") + M = cv2.getPerspectiveTransform(rect, dst) + warped = cv2.warpPerspective(image, M, (maxWidth, maxHeight)) + return warped + + + + + +image = cv2.imread(args["image"]) +ratio = image.shape[0] / 500.0 +orig = image.copy() +image = imutils.resize(image, height = 500) +gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) +gray = cv2.GaussianBlur(gray, (5, 5), 0) +edged = cv2.Canny(gray, 75, 200) +cv2.imshow("Image", image) +cv2.imshow("Edged", edged) +print("STEP 1: Edge Detection") +cv2.waitKey(0) +cv2.destroyAllWindows() + + + + + +cnts = cv2.findContours(edged.copy(), cv2.RETR_LIST, cv2.CHAIN_APPROX_SIMPLE) +cnts = imutils.grab_contours(cnts) +cnts = sorted(cnts, key = cv2.contourArea, reverse = True)[:5] +for c in cnts: + peri = cv2.arcLength(c, True) + approx = cv2.approxPolyDP(c, 0.02 * peri, True) + if len(approx) == 4: + screenCnt = approx + break +print("STEP 2: Find contours of paper") +cv2.drawContours(image, [screenCnt], -1, (0, 255, 0), 2) +cv2.imshow("Outline", image) +cv2.waitKey(0) +cv2.destroyAllWindows() + + + + +warped = four_point_transform(orig, screenCnt.reshape(4, 2) * ratio) +warped = cv2.cvtColor(warped, cv2.COLOR_BGR2GRAY) + +# warped = cv2.adaptiveThreshold(warped, 255, cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY, 251, 11) + + + +T = threshold_local(warped, 11, offset = 10, method = "gaussian") +warped = (warped > T).astype("uint8") * 255 + +print("STEP 3: Apply perspective transform") +cv2.imshow("Original", imutils.resize(orig, height = 650)) +cv2.imshow("Scanned", imutils.resize(warped, height = 650)) +cv2.waitKey(0) + + + diff --git a/img3.jpg b/img3.jpg new file mode 100644 index 0000000000000000000000000000000000000000..702b299998ead10b6f64347fa1c13bc17dca70c1 GIT binary patch literal 40447 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 Date: Tue, 29 Dec 2020 13:35:39 +0530 Subject: [PATCH 2/2] Added command for saving output file --- image_align_scan.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/image_align_scan.py b/image_align_scan.py index 5cdcb03..1b4e6dc 100644 --- a/image_align_scan.py +++ b/image_align_scan.py @@ -3,8 +3,10 @@ import argparse import cv2 import imutils +import os +current_path=os.getcwd() ap = argparse.ArgumentParser() ap.add_argument("-i", "--image", required = True) @@ -98,3 +100,4 @@ def four_point_transform(image, pts): +cv2.imwrite(current_path+'/Scanned.png',imutils.resize(warped, height = 650))