Я разрабатываю метод локализации номерного знака и, в конечном итоге, применения преобразования перспективы для выпрямления пластины по горизонтали.
В настоящее время мой конвейер обработки изображений может приблизительно определить местонахождение пластины, но я бы хотел сузить егов дальнейшем.Я применил обнаружение краев, морфологические операции и анализ связанных компонентов, чтобы добраться до этой стадии.
Мой результат для обнаружения номерного знака в настоящее время таков:
Я пытаюсь реализовать HoughLinesP, чтобы найти прямые линии шрифтов изатем найдите пересечение линий с HoughPeaks, как это
Моя текущая попытка найти линии жесткости показана в коде ниже.Тем не менее, кто-нибудь может подсказать мне, как найти крутые пики?Я провел некоторые исследования в Интернете и не смог найти надежных ссылок.
def findHoughLines(self, image):
from src.Line import Line
# Add 1 channel to binary image
image = image[..., np.newaxis]
vis = cv2.cvtColor(image, cv2.COLOR_GRAY2BGR)
canny = cv2.Canny(image, 100, 200)
cv2.imshow("canny", canny)
lines = cv2.HoughLinesP(canny, rho=0.01, theta=np.pi/360, threshold=10, minLineLength=100, maxLineGap=30)
print(len(lines))
linesHorizontal, linesVertical = [], []
if lines is None:
print("[Info] No Hough lines have been detected")
return image
for line in lines:
x1, y1, x2, y2 = line[0]
if abs(x1 - x2) > abs(y1 - y2):
linesHorizontal.append(Line(line[0]))
else:
linesVertical.append(Line(line[0]))
# sort lines
linesHorizontal = sorted(linesHorizontal, key=lambda l: l.d_y, reverse=True)[:10]
linesVertical = sorted(linesVertical, key=lambda l: l.d_x, reverse=True)[:10]
for line in linesHorizontal:
x1, y1, x2, y2 = line.points
cv2.line(vis, (x1, y1), (x2, y2), (0, 0, 255), 1)
for line in linesVertical:
x1, y1, x2, y2 = line.points
cv2.line(vis, (x1, y1), (x2, y2), (0, 255, 0), 1)
cv2.imshow("HoughLines", vis)
Результат обнаружения HoughLinesP