Разделить изображение по горизонтали с помощью питона на основе темной центральной линии - PullRequest
0 голосов
/ 30 января 2019

Цель состоит в том, чтобы разделить изображение по горизонтали (двойную газетную страницу) на питоне на основе вертикальной центральной линии, которая темнее других областей вокруг.

Пример изображения:

enter image description here

Не повезло, используя opencv (cv2) для начального кадрирования и поворота двойной страницы на черном фоне с помощью cv2.Canny, а затем сортировали контуры по cv2.contourArea.

Но теперь мне просто интересно найти центральную линию, а затем разделить изображение на два отдельных изображения.Используя снова cv2.Canny, я вижу, что он может идентифицировать эту центральную линию, но не уверен, как определить эту длинную вертикальную линию и использовать ее для разделения изображения:

enter image description here

Конечной целью будут два изображения, например:

enter image description here enter image description here

Любые предложения будут наиболееприветствуется.

1 Ответ

0 голосов
/ 30 января 2019

Сначала запустите горизонтальный градиент, чтобы выделить только вертикальные края.Вы можете вычислить горизонтальный градиент с этими коэффициентами:

-1   0   1
-2   0   2
-1   0   1

Затем вычислите сумму вертикальных столбцов, вы можете использовать np.sum(array,axis=0), и вы получите это:

enter image description here

Я изменил форму для удобства просмотра - на самом деле он всего 1 пиксель в высоту.Надеюсь, вы увидите яркую белую линию в середине, которую вы можете найти с помощью Numpy argmax().Также будет лучше, если вы просто сделаете горизонтальный градиент, потому что в данный момент я использую пурпурно-желтое изображение с улучшенными вертикальными и горизонтальными краями.

Обратите внимание, что вдохновением для этого подхода является то, что вы сказали, что вы «хочу идентифицировать эту длинную вертикальную осевую линию» , и обоснование заключается в том, что длинная линия белых пикселей будет складываться в большую сумму.Обратите внимание, что я предположил, что ваше изображение искажено (так как вы сказали, что линия вертикальная), и этот метод может не очень хорошо работать на перекосах, где «вертикальная» линия будет распределена по нескольким столбцам.

...