Python OpenCV, как убрать пробел между строками - PullRequest
3 голосов
/ 18 октября 2019

У меня есть это изображение:

enter image description here

И моя цель состоит в том, чтобы разделить L-образную форму на два разных прямоугольника (два, которые вместе составляютL-образный). С длинным прямоугольником проблем нет, потому что он определяется как контур. Но с более широким прямоугольником это проблема, потому что между двумя строками есть пробел. Есть ли решение по этому вопросу?

Я еще не написал для него никакого кода, поэтому я ничего не могу опубликовать

Заранее спасибо

Ответы [ 2 ]

2 голосов
/ 19 октября 2019

Всякий раз, когда вы выполняете обработку изображений с помощью OpenCV, вы хотите, чтобы нужные объекты обрабатывались белым цветом, а фон - черным. В этом случае, поскольку вы хотите изменить линии, сначала необходимо инвертировать изображение, чтобы линии были белым, а фон - черным. Отсюда мы можем построить горизонтальное ядро ​​и выполнить морфологическое закрытие, чтобы соединить линии вместе. Точно так же, если вы хотите закрыть пробелы между вертикальными линиями, вы можете выполнить те же шаги с вертикальным ядром.

Результат

enter image description here

Код

import cv2

image = 255 - cv2.imread('1.png', 0)
kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (60,1))
result = 255 - cv2.morphologyEx(image, cv2.MORPH_CLOSE, kernel, iterations=1)

cv2.imshow('result', result)
cv2.waitKey()
0 голосов
/ 18 октября 2019

Если вы хотите использовать только методы на основе контуров, то вы можете попробовать с эрозией. Примените эрозию к изображению и с соответствующими параметрами, вы можете сократить интервал за счет увеличения толщины линий, но я думаю, что это нормально для вашего случая, поскольку вы полагаетесь только на извлечение контуров. Попробуйте это:

kernel = np.ones((7,7), np.uint8)
eroded_im = cv2.erode(im, kernel, iterations=5 or 6)
...