Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/340.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 无法处理通过scikit图像在OpenCV中转换的图像_Python_Image_Opencv_Preprocessor_Scikit Image - Fatal编程技术网

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

Python 无法处理通过scikit图像在OpenCV中转换的图像,python,image,opencv,preprocessor,scikit-image,Python,Image,Opencv,Preprocessor,Scikit Image,我想使用scikit图像模块对图像进行骨架化。此图像由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 I

我想使用scikit图像模块对图像进行骨架化。此图像由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.形态学.skeletonize对图像进行骨架化。我曾尝试编写代码,使用OpenCV和Python执行腐蚀和膨胀,以手动对图像进行骨架化。但是,这被证明是一个非常低效的处理,所以我决定在这一点上切换到scikit图像库。但是,当我使用以下代码将OpenCV预处理的numpy数组传递给scikit图像模块时:

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

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()

请查看下面的代码是否有效

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()

你好,谢谢你的建议。但是,我在二值化输入th4而不是img上得到了类似的错误。th4是阈值化的二值化图像。看起来像cv2.treshold()返回一个数组,其中255为白色,0为黑色。您可以转换th4矩阵。我会编辑我的帖子你好,谢谢你的建议。但是,我在二值化输入th4而不是img上得到了类似的错误。th4是阈值化的二值化图像。看起来像cv2.treshold()返回一个数组,其中255为白色,0为黑色。您可以转换th4矩阵。我将编辑我的帖子