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

imp*_*roc 10 python opencv image-processing contour scikit-image

我试图用scikit-image创建的骨架图像中的cv2 python库找到轮廓,我得到了这个错误:

    contours, hierarchy = cv2.findContours(skel,cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE)
TypeError: <unknown> data type = 0 is not supported
Run Code Online (Sandbox Code Playgroud)

我的问题是:我需要做什么才能转换为cv2和反之?

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

我还使用了mahotas(numpy.bool)和pymorph库.我如何从scikit-image转换为这些库,反之亦然?

Ste*_*alt 15

scikit-image 提供不同数据类型之间的转换例程,这些例程也正确地保留了缩放:

from skimage import img_as_ubyte

cv_image = img_as_ubyte(any_skimage_image)
Run Code Online (Sandbox Code Playgroud)

更新:scikit-image用户指南现在有一个更详细的部分:http://scikit-image.org/docs/stable/user_guide/data_types.html#working-with-opencv

  • 如果cv_image是无符号字节数组,则skimage默认会理解它.如果您更喜欢使用浮点图像,`img_as_float`应该可以解决问题.有关更多信息,请参阅skimage用户指南. (3认同)
  • 什么是反之亦然的变体:从 cv_image 到 skimage? (2认同)
  • 此外,无论谁需要这些转换,请记住 OpenCV 默认使用 BGR 色彩空间,而 Skimage 使用 RGB 色彩空间 :-) (2认同)