Как использовать OpenCV для обнаружения флажка, который пересекает строку в документе - PullRequest
1 голос
/ 22 января 2020

Я успешно использовал код для обнаружения флажков в документах, следуя базовому сценарию, подобному следующему:

Как обнаруживать / находить контуры флажков с помощью OpenCV

Это работает хорошо, однако происходит сбой всякий раз, когда блок касается линии на одной из его сторон, что встречается довольно часто в моем случае использования. Я включил два примера: один оригинал, а другой - изображение после обработки с помощью canny.

Флажок, пересекающий линию Флажок после canny

Is существует ли общий метод для разделения двух перекрывающихся контуров, или какой-либо другой метод, который я мог бы использовать для обнаружения прямоугольника с таким перекрытием?

1 Ответ

1 голос
/ 22 января 2020

Вы можете использовать морфологию для удаления большей части длинной строки, используя Python / OpenCV, следующим образом. Используйте морфологию близко, чтобы обнаружить линию. Затем инвертируйте строку и добавьте ее обратно к входному изображению, чтобы написать поверх строки белым цветом.

Ввод:

enter image description here

import cv2
import numpy as np

img = cv2.imread('box_line.png')

# do morphology to find long horizontal lines using a horizontal kernel longer than the width of the box
kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (80,1))
line = cv2.morphologyEx(img, cv2.MORPH_CLOSE, kernel, iterations = 1)

# invert line
line = (255-line)

# add inverted line to image
result = cv2.add(img, line)

# write result to disk
cv2.imwrite("line_removed.png", result)

# display it
cv2.imshow("image", img)
cv2.imshow("line", line)
cv2.imshow("result", result)
cv2.waitKey(0)


enter image description here

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

...