【发布时间】: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