Как использовать вывод cv2.HoughLinesP () для поворота исходного изображения? - PullRequest
2 голосов
/ 24 февраля 2020

Я использую cv2.HoughLinesP(), и он дает мне обнаруженные линии. Эти линии в основном точны при нахождении угла объекта. Затем я хочу повернуть исходное изображение в соответствии с этими строками.

Мое изображение:

enter image description here

Мой код:

import cv2 as cv
import numpy as np
img = cv.imread(img)
gray = cv.cvtColor(img,cv.COLOR_BGR2GRAY)
edges = cv.Canny(gray,50,150,apertureSize = 3)
lines = cv.HoughLinesP(edges,1,np.pi/180,100,minLineLength=100,maxLineGap=10)
for line in lines:
    x1,y1,x2,y2 = line[0]
    cv.line(img,(x1,y1),(x2,y2),(0,255,0),5)
cv2.imshow('', img)
cv2.waitKey()

Результат:

enter image description here

Что я хочу:

enter image description here

1 Ответ

1 голос
/ 25 февраля 2020

Кажется, вы пытаетесь выполнить коррекцию перекоса. Вместо того, чтобы использовать cv2.HoughLinesP, чтобы найти угол и повернуть объект, вы можете использовать cv2.minAreaRect, чтобы найти угол, а затем cv2.getRotationMatrix2D + cv2.warpAffine для выравнивания изображения.

Вход -> Выход

image image

Угол наклона

-29.35775375366211

Код

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()

Примечание: Для других методов коррекции перекоса обратите внимание на

  1. Python Коррекция перекоса OpenCV

  2. Как снять перекос изображения

  3. Определение угла ориентации изображения в зависимости от направления текста

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