-
Notifications
You must be signed in to change notification settings - Fork 0
/
textdeskew.py
37 lines (31 loc) · 1.05 KB
/
textdeskew.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
import numpy as np
import cv2
def textdeskew(image):
"""
Function that calculates a the rotation angle for documents that are
already properly scanned. Using the angle, it tries to deskew. Useful in
cases where there is no difference between foreground and background, and
the document is properly scanned.
"""
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
gray = cv2.bitwise_not(gray)
thresh = cv2.threshold(gray, 0, 255,
cv2.THRESH_BINARY | cv2.THRESH_OTSU)[1]
coords = np.column_stack(np.where(thresh > 0))
angle = cv2.minAreaRect(coords)[-1]
if angle < -45:
angle = -(90 + angle)
else:
angle = -angle
(h, w) = image.shape[:2]
center = (w // 2, h // 2)
M = cv2.getRotationMatrix2D(center, angle, 1.0)
rotated = cv2.warpAffine(image, M, (w, h),
flags=cv2.INTER_CUBIC, borderMode=cv2.BORDER_REPLICATE)
print("[INFO] angle: {:.3f}".format(angle))
# cv2.namedWindow("Input", cv2.WINDOW_NORMAL)
# cv2.namedWindow("Final", cv2.WINDOW_NORMAL)
# cv2.imshow("Input", image)
# cv2.imshow("Final", rotated)
# cv2.waitKey(0)
return rotated