Ask Your Question

Revision history [back]

click to hide/show revision 1
initial version

Deskew skews the untilted image

def correct_skew(image, delta=0.5, limit=5):
def determine_score(arr, angle):
    data = inter.rotate(arr, angle, reshape=False, order=0)
    histogram = np.sum(data, axis=1)
    score = np.sum((histogram[1:] - histogram[:-1]) ** 2)
    return histogram, score   
scores = []
angles = np.arange(-limit, limit + delta, delta)
for angle in angles:
    histogram, score = determine_score(image, angle)
    scores.append(score)
best_angle = angles[scores.index(max(scores))] 

return best_angle

img = cv2.imread(images_path,cv2.IMREAD_GRAYSCALE) thresh = cv2.threshold(img, 0, 255, cv2.THRESH_BINARY_INV + cv2.THRESH_OTSU)[1] angle = correct_skew(img) (h, w) = img.shape[:2] center = (w // 2, h // 2) M = cv2.getRotationMatrix2D(center, angle, 1.0) rotated = cv2.warpAffine(img, M, (w, h), flags=cv2.INTER_CUBIC, \ borderMode=cv2.BORDER_REPLICATE) cv2.imwrite(rotimages_path,rotated)

Deskew skews the untilted image

Code:

 def correct_skew(image, delta=0.5, limit=5):
 def determine_score(arr, angle):
     data = inter.rotate(arr, angle, reshape=False, order=0)
     histogram = np.sum(data, axis=1)
     score = np.sum((histogram[1:] - histogram[:-1]) ** 2)
     return histogram, score   
 scores = []
 angles = np.arange(-limit, limit + delta, delta)
 for angle in angles:
     histogram, score = determine_score(image, angle)
     scores.append(score)
 best_angle = angles[scores.index(max(scores))] 

 return best_angle

img = cv2.imread(images_path,cv2.IMREAD_GRAYSCALE) thresh = cv2.threshold(img, 0, 255, cv2.THRESH_BINARY_INV + cv2.THRESH_OTSU)[1] angle = correct_skew(img) (h, w) = img.shape[:2] center = (w // 2, h // 2) M = cv2.getRotationMatrix2D(center, angle, 1.0) rotated = cv2.warpAffine(img, M, (w, h), flags=cv2.INTER_CUBIC, \ borderMode=cv2.BORDER_REPLICATE) cv2.imwrite(rotimages_path,rotated)

cv2.imwrite(rotimages_path,rotated)