【问题标题】:How can i convert images from scikit-image to opencv2 and other libraries?如何将图像从 scikit-image 转换为 opencv2 和其他库?
【发布时间】:2013-04-15 22:13:47
【问题描述】:

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

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

我的问题是:我必须做什么才能转换为 cv2,反之亦然?

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

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

【问题讨论】:

标签: python opencv image-processing contour scikit-image


【解决方案1】:

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

from skimage import img_as_ubyte

cv_image = img_as_ubyte(any_skimage_image)

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

【讨论】:

  • 反之亦然的变体:从 cv_image 到 skimage?
  • 如果 cv_image 是一个无符号字节数组,skimage 默认会理解它。如果您更喜欢使用浮点图像,img_as_float 应该可以解决问题。有关更多信息,请参阅 skimage 用户指南。
  • 另外,无论谁需要这些转换,请记住 OpenCV 默认使用 BGR 颜色空间,而 Skimage 使用 RGB 一个:-)
  • 这是一个很好的提醒,谢谢 Yuriy。我将在 scikit-image 文档上提交一个问题,以添加有关此转换的部分。 (github.com/scikit-image/scikit-image/issues/2500)
  • 回答上面的更新,链接到文档中的新部分。
【解决方案2】:

这对我有用:

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)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-12-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-25
    相关资源
    最近更新 更多