Как рассчитать правильный угол в OpenCV и повернуть изображение по координатам?Python

Программы на Python
Ответить
Anonymous
 Как рассчитать правильный угол в OpenCV и повернуть изображение по координатам?

Сообщение Anonymous »

Я работаю над проектом и обнаруживаю каждую таблицу в изображении с помощью OpenCV. Мне удалось обнаружить, извлечь и обрезать таблицы, поэтому у меня уже есть обрезанные изображения со всеми таблицами.
Теперь мой вопрос: смогу ли я вычислить угол для каждой таблицы? изображение (== таблица) и выполните правильный поворот. Причина в том, что многие из них расположены вертикально или совершенно криво. Но мне нужно, чтобы они были горизонтальными, чтобы выполнить распознавание текста.
Есть ли способ вычислить правильный угол и выполнить правильный поворот? Есть ли у кого-нибудь идея или решение?
Заранее спасибо!
В моем случае:
  • У меня есть таблицы, которые горизонтальны и имеют угол < 1 (хорошо)
  • У меня также есть таблицы, которые вертикальны, но также имеют угол < 1 ( нехорошо)
  • У меня есть вертикальные столы, у которых угол почти 90, но поворот идет в неправильном направлении.
  • У меня есть горизонтальные таблицы с углом 90, и код поворачивает изображение.
Я проверил этот код (источник: Как использовать выходные данные cv2.HoughLinesP() для поворота исходного изображения?), но он выдает значения, упомянутые выше:
import cv2
import numpy as np

# Load image, grayscale, Otsu's threshold
image = cv2.imread('1.png')
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
gray = 255 - gray
thresh = cv2.threshold(gray, 0, 255, cv2.THRESH_BINARY + cv2.THRESH_OTSU)[1]

# Compute rotated bounding box
coords = np.column_stack(np.where(thresh > 0))
angle = cv2.minAreaRect(coords)[-1]

if angle < -45:
angle = -(90 + angle)
else:
angle = -angle
print(angle)

# Rotate image to deskew
(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.imshow('thresh', thresh)
cv2.imshow('rotated', rotated)
cv2.waitKey()


Подробнее здесь: https://stackoverflow.com/questions/793 ... oordinates
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»