Итак, как я сказал в комментариях, вы должны поиграть с параметрами для расширения и жестких линий.
Проблема: линии, которые вы ищете, в частности линии платы проверки, очень тонкие и не соединены.Следовательно, можно использовать только линии Houghlines, но требуется много настроек параметров.
Решение: Расширьте изображение, прежде чем наложить неровные линии, и соответственно отрегулируйте параметры для ночных линий.
Расширение - это, по сути, морфологическая операция, в которой элемент пикселя равен '1', если хотя бы один пиксель под ядром равен '1'.Таким образом, увеличивается белая область на изображении или увеличивается размер объекта переднего плана.В качестве альтернативы вы также можете попробовать использовать Открытие , которое в основном является эрозией (противоположной дилатации) + дилатация.
Параметры для Houghlines:
Функция OpenCV :
lines = cv.HoughLinesP(image, rho, theta, threshold[, lines[, minLineLength[, maxLineGap]]])
Наиболее важными параметрами в вашем случае являются:
threshold - Решает, какие строки учитывать, только выбираются линии с интенсивностью> порог .
minLineLength - Как видно из названия, это определяет, какой должна быть минимальная длина линии (в пикселях), равная классифицируется как линия
maxLineGap - Вероятно, второй самый важный параметр, если не самый важный (жесткая конкуренция с порогом), это определяет, что должно быть максимальный зазор между двумя строками, которые должны быть отнесены к одной строке .
Другие параметры:
rho : разрешение по расстоянию в пикселях, 1 здесь
тета : разрешение по углу в радиans, 1 здесь
Для хорошего урока, посмотрите , как работает грубое преобразование?
Использование OpenCV со следующим кодом:
import cv2
import numpy as np
image1 = cv2.imread('lines.jpg')
output = image1
image1 = cv2.cvtColor(image1, cv2.COLOR_BGR2GRAY)
canny = cv2.Canny(image1, 100, 200)
canny = cv2.dilate(canny, (5,5), 7)
lines = cv2.HoughLinesP(canny, 1, np.pi/360, 120, minLineLength=200, maxLineGap=30)
for line in lines:
for x1,y1,x2,y2 in line:
cv2.line(output, (x1, y1), (x2, y2), (0, 255, 0), 2)
cv2.imwrite("lines_res.jpg", output)
Исходное изображение:
Результат:
Надеждаэто помогает!Дайте мне знать, что вы думаете!