Python разделить изображение на несколько частей горизонтальными пунктирными линиями - PullRequest
1 голос
/ 10 января 2020

У меня есть куча изображений, подобных этой:

enter image description here

Где в желтой рамке - содержимое различных профилей (текст), где каждый раздел делится на пунктирные линии (нет прямых линий). Так что мне нужно разделить изображение на несколько отдельных изображений пунктирными линиями. До сих пор я пробовал множество примеров python и cv2 с Преобразованием Хафа-линии , но ни одна из моих попыток не сработала при обнаружении.

1 Ответ

2 голосов
/ 10 января 2020

После комментария @ efirvida, вот очень базовый c подход к тому, как это сделать.

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

# import image/array manipulation packages
import cv2
import numpy as np

# read image with OpenCV 2
img = cv2.imread("path/to/file/z4Xje.jpg")

# identify one line of pixels that has dashes
dashes = img[761,:,:]

# check where to split the picture and store that information
splits = [0]
for i in range(img.shape[0]):
    # np.allclose allows you to have small differences between dashed lines
    if np.allclose(img[i,:,:], dashes):
        splits.append(i)

# add last split (height of picture)
splits.append(img.shape[0])

# write each cropped picture to your desired directory
for j in range(len(splits)-1):
    new_img = img[splits[j]:splits[j+1],:]
    cv2.imwrite("/path/to/export/"+str(j)+".jpg", new_img)

Это определенно не идеальное решение, но я надеюсь, что оно даст вам подсказки о том, как улучшить ваш текущий алгоритм!

Это дало мне эти картинки для того, что вы предоставили:

  • первый сплит

enter image description here

  • второй сплит

enter image description here

  • третий сплит

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...