Определение угла поворота текста на изображении - PullRequest
1 голос
/ 02 апреля 2019

Итак, у меня есть изображение с текстом, который не в состоянии позволить мне извлечь из него информацию, поэтому мне нужно найти что-то, чтобы повернуть его.

Я пробовал так много библиотек и теорий, но ничего особенно не работает OpenCV. Я присоединюсь к образцу, который нужно повернуть. Большое спасибо.

"https://drive.google.com/open?id=1gzF1VLtb8Q7gOQ6u0IzrB98Ae1VC3TPF"

я пробовал это например:

import numpy as np
import cv2

image = cv2.imread("test1.jpg")
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))
print coords
angle = cv2.minAreaRect(coords)[-1]
print angle 
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)   


cv2.putText(rotated, "Angle: {:.2f} degrees".format(angle),(10, 30), cv2.FONT_HERSHEY_SIMPLEX, 0.7, (0, 0, 255), 2)

print("[INFO] angle: {:.3f}".format(angle))

Я попробовал также эту теорию: Сканируйте документ с определенной ориентацией и суммируйте количество «черных» пикселей в каждой строке сканирования (создавая одномерный массив счетчиков, каждый индекс представляет координату Y, профиль). Рассчитать дисперсию отсчетов (профиль). Повторите для нескольких углов (может быть сделано в режиме двоичного поиска, чтобы уменьшить обработку) Угол, который приводит к наибольшему отклонению, является правильным углом (из-за текстовых строк, создающих большие пики из печатного текста, и низких долин из-за отсутствия текста между строками) Затем, найдя этот угол, вы можете соответствующим образом настроить изображение и сделать потрясающее распознавание текста. Код ниже:

from PIL import Image

from resizeimage import resizeimage

jpgfile = Image.open("test.jpg")

#size = jpgfile.size[0]/5 , jpgfile.size[1]/5

#cover = resizeimage.resize_cover(jpgfile, size)

#cover.show()

for i in range(0,360):
#a reviser
    rotated = jpgfile.rotate(i)
    rotated.save("out.jpg")
    image = cv2.imread("out.jpg")
    gray = cv2.cvtColor(image,cv2.COLOR_BGR2GRAY)
    ret,thresh = cv2.threshold(gray,127,255,cv2.THRESH_BINARY_INV)
#cv2.imshow('binary',thresh)
#cv2.waitKey(0)

    thresh_sum = thresh.sum(axis=1)
#thresh_sum.show

    a = []

    a = np.append(a,thresh_sum)
    variance = 0
    variance = np.var(thresh_sum,0)

    print(variance,i)

rotated.show() 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...