【问题标题】:Not able to convert RGB image to gray scale using scikit image无法使用 scikit 图像将 RGB 图像转换为灰度
【发布时间】:2021-02-24 16:04:18
【问题描述】:

我尝试将 RGB 图像转换为 Otsu 二进制图像(灰度),但这似乎不起作用,因为我收到了如下所述的错误。

from cv2 import cv2
import numpy as np
from skimage.color import rgb2gray
from skimage.filters import threshold_otsu
from skimage.io import imread
from skimage.morphology import skeletonize
from skimage.util import invert
import matplotlib.pyplot as plt

img = rgb2gray(imread('Ared.png'))
binary = img > threshold_otsu(img)
np.unique(binary)
skeleton = skeletonize(invert(binary))
cv2.imshow('original', img)
cv2.imshow('skeleton', skeleton)
cv2.waitKey(0)
cv2.destroyAllWindows()

终端中的结果

  img = rgb2gray(imread('Ared.png'))
Traceback (most recent call last):
  File "preprocessing.py", line 16, in <module>
    cv2.imshow('skeleton', skeleton)
TypeError: Expected Ptr<cv::UMat> for argument '%s'

【问题讨论】:

  • 根本不是答案,但是您是否尝试过查看 skeleton 变量(例如打印它)?您应该检查其值的范围([0, 1] ? [0, 255] ?)及其类型(float ? uint8 ?)我觉得问题不在于您使用 skimage,而在于 cv2当被要求显示图像时有点挑剔。
  • 使用调试器比较img和skeleton的数据类型(int数组、float32数组等),它们可能不同但应该相同。

标签: python image opencv binary scikit-image


【解决方案1】:

您的格式错误。您需要将其更改为 float32。这是 opencv 的常见错误。您可以更改此行以将其转换为 float32,它应该可以正常工作。

cv2.imshow('skeleton', np.float32(skeleton))

【讨论】:

    【解决方案2】:

    错误的异常消息很糟糕......

    cv2.imshow 不处理二进制数组。根据this 的回答,可接受的类型是uint8uint16intfloatdouble

    您应该能够将数组转换为uint8

    skeleton.astype('u1')
    

    这会让你得到介于 0 和 1 之间的值,这一切都非常黑暗。如果将数组乘以 255,则颜色应该是预期的黑色和白色:

    skeleton.astype('u1') * 255
    

    带有来自 skimage 的数据图像的完整示例:

    from cv2 import cv2
    from skimage.filters import threshold_otsu
    from skimage.morphology import skeletonize
    from skimage.util import invert
    from skimage.data import camera
    
    img = camera()
    binary = img > threshold_otsu(img)
    skeleton = skeletonize(invert(binary))
    cv2.imshow('original', img)
    cv2.imshow('skeleton', skeleton.astype('u1')*255)
    cv2.waitKey(0)
    cv2.destroyAllWindows()
    

    【讨论】:

      猜你喜欢
      • 2018-08-15
      • 1970-01-01
      • 2014-02-26
      • 2014-12-22
      • 2019-11-14
      • 1970-01-01
      • 2013-10-25
      • 1970-01-01
      相关资源
      最近更新 更多