Python заливка скима не будет работать на загруженном бинаризованном изображении - PullRequest
0 голосов
/ 11 января 2020

Я пытаюсь применить метод flood_fill к определенному изображению. К сожалению, даже при том, что это работает на образцовом изображении, это не работает на моем, который уже преобразован в двоичную форму.

Код, который работает:

from skimage import data, filters
from skimage.segmentation import flood, flood_fill
import cv2 as cv


cameraman = data.camera()
flooded = flood_fill(cameraman, (200, 100), 255, tolerance=10)
cv.imshow("aaa",flooded)
cv.waitKey()

И код, который не :

from skimage import data, filters
from skimage.segmentation import flood, flood_fill
import cv2 as cv
import numpy as np


img = cv.imread("Tubka_binar.png")
flooded = flood_fill(img, (200, 100), 100, tolerance = 10)

cv.imshow("aaa",flooded)
cv.waitKey()

И ошибки, которые я получаю:

Traceback (most recent call last):
  File "C:/Users/User/Documents/PW/MAGISTERSKIE/__PRACA/Python/Grubość Tuby.py", line 8, in <module>
    flooded = flood_fill(img, (200, 100), 100, tolerance = 10)
  File "C:\Users\User\Desktop\PROJEKT_PYTHONOWY\venv\lib\site-packages\skimage\morphology\_flood_fill.py", line 104, in flood_fill
    tolerance=tolerance)
  File "C:\Users\User\Desktop\PROJEKT_PYTHONOWY\venv\lib\site-packages\skimage\morphology\_flood_fill.py", line 235, in flood
    working_image.shape, order=order)
  File "<__array_function__ internals>", line 6, in ravel_multi_index
ValueError: parameter multi_index must be a sequence of length 3

Process finished with exit code 1

Переменные изображения в обоих случаях выглядят одинаково. Изображение, которое я прочитал во втором случае, представляет собой бинаризованную фотографию, которая принимает только два значения: 0 и 255.

Что вызывает это? С наилучшими пожеланиями

1 Ответ

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

Мне кажется, что ваше второе изображение на самом деле не в градациях серого, а скорее сохранено (или загружено) как 3-канальное RGB-изображение. Если вы напечатаете img.shape, держу пари, это будет что-то вроде (512, 512, 3). Вы можете исправить это, изменив код чтения на:

img = cv.imread("Tubka_binar.png")[..., 0]
...