无法处理通过 scikit-image 在 OpenCV 中转换的图像

Unable to Process an image transformed in OpenCV via scikit-image

我想使用 scikit-image 模块对图像进行骨架化以进行骨架化。此图像由 OpenCV 库预处理。给定一个图像 'Feb_16-0.jpg',我将其转换为灰度,执行打开图像的形态学变换,然后使用 OpenCV 和 Python:

应用高斯模糊和自适应阈值处理
import cv2
import numpy as np
from matplotlib import pyplot as plt
from skimage.morphology import skeletonize
from skimage.viewer import ImageViewer
img = cv2.imread('Feb_16-0.jpg',0)
kernel = np.ones((1,1),np.uint8)
opening = cv2.morphologyEx(img, cv2.MORPH_OPEN, kernel)
blur = cv2.GaussianBlur(opening,(1,1),0)
ret3,th4 = cv2.threshold(blur,0,255,cv2.THRESH_BINARY+cv2.THRESH_OTSU)

我现在想使用 scikit-image 对图像进行骨架化 skimage.morphology.skeletonize。我已经尝试编写用于执行腐蚀和膨胀的代码,以使用 OpenCV 和 Python 手动对图像进行骨架化。但是,这被证明是一个非常低效的处理,所以我决定此时切换到 scikit-image 库。但是,当我使用以下代码将 OpenCV 预处理的 numpy 数组传递给 scikit-image 模块时:

skel = skeletonize(th4)

并尝试查看相同的结果,我最终得到了错误:

Image contains values other than 0 and 1

我无法解释同样的原因。谁能帮我解决这个数据类型错误?

skeletonize() 的输入矩阵需要是二进制的,以 0/1 或 True/False 作为条目。 cv2.threshold() 的输出是二进制的,但值为 0/255。要将 th4 矩阵转换为 0/1 形式,您可以执行以下操作:

th4[th4 == 255] = 1

请查看以下代码是否有效。

import cv2
import numpy as np
from matplotlib import pyplot as plt
from skimage.morphology import skeletonize
from skimage.viewer import ImageViewer
img = cv2.imread('Feb_16-0.jpg',0)
kernel = np.ones((1,1),np.uint8)
opening = cv2.morphologyEx(img, cv2.MORPH_OPEN, kernel)
blur = cv2.GaussianBlur(opening,(1,1),0)
ret3,th4 = cv2.threshold(blur,0,255,cv2.THRESH_BINARY+cv2.THRESH_OTSU)
th4[th4 == 255] = 1
skel = skeletonize(th4)
viewer = ImageViewer(skel)
viewer.show()