Python skimage flood fill 不适用于加载的二值化图像
Python skimage flood fill won't work on a loaded binarized image
我正在尝试对特定图像应用 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。
这是什么原因造成的?
最好的问候
在我看来,您的第二张图像实际上并不是灰度图像,而是保存(或加载)为 3 通道 RGB 图像。如果你打印 img.shape
,我打赌它会像 (512, 512, 3)。您可以通过将阅读代码更改为:
来解决此问题
img = cv.imread("Tubka_binar.png")[..., 0]
我正在尝试对特定图像应用 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。
这是什么原因造成的? 最好的问候
在我看来,您的第二张图像实际上并不是灰度图像,而是保存(或加载)为 3 通道 RGB 图像。如果你打印 img.shape
,我打赌它会像 (512, 512, 3)。您可以通过将阅读代码更改为:
img = cv.imread("Tubka_binar.png")[..., 0]