Python 如何将图像从scikit图像转换为opencv2和其他库?

Python 如何将图像从scikit图像转换为opencv2和其他库?,python,opencv,image-processing,contour,scikit-image,Python,Opencv,Image Processing,Contour,Scikit Image,我试图使用cv2 python库在使用scikit image创建的骨骼化图像中查找轮廓,但出现以下错误: contours, hierarchy = cv2.findContours(skel,cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE) TypeError: <unknown> data type = 0 is not supported contours,hierarchy=cv2.findContours(skel,cv2.RETR\

我试图使用cv2 python库在使用scikit image创建的骨骼化图像中查找轮廓,但出现以下错误:

    contours, hierarchy = cv2.findContours(skel,cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE)
TypeError: <unknown> data type = 0 is not supported
contours,hierarchy=cv2.findContours(skel,cv2.RETR\u TREE,cv2.CHAIN\u APPROX\u SIMPLE)
TypeError:不支持数据类型=0
我的问题是:我要做什么才能转换成cv2和viceversa

我知道opencv使用numpy.uint8类型来表示二进制图像,而不是scikit image numpy.float64

我还使用了mahotas(numpy.bool)和pymorph库。
如何将scikit图像转换为这些库和其他库?

scikit图像
提供了不同数据类型之间的转换例程,这些数据类型也可以正确地保持缩放:

from skimage import img_as_ubyte

cv_image = img_as_ubyte(any_skimage_image)

更新:《scikit图像用户指南》现在有一个更详细的部分:这对我有用:

image = skimage.io.imread(mpath)
img = image[:, :, ::-1] # convert image from RGB (skimage) to BGR (opencv)
cv2.namedWindow('original', cv2.WINDOW_NORMAL)
cv2.imshow('original',img)

我想我找到了自己的解决办法!如果我使用:skel=np.array(skel,dtype=np.uint8),我就可以轻松地在opencv2类型中进行转换,等等!反之亦然:从cv_图像到skimage?如果cv_图像是一个无符号字节数组,skimage将默认理解它。如果您更喜欢使用浮点图像,
img\u as\u float
应该可以做到这一点。有关更多信息,请参阅skimage用户指南。此外,无论谁需要这些转换,请记住OpenCV默认使用BGR颜色空间,而skimage使用RGB one:-)这是一个很好的提醒,谢谢Yuriy。我将在scikit图像文档上提交一个问题,以添加有关此转换的部分。()回答上面的更新,并链接到文档中的新部分。