我曾尝试将RGB图像转换为大津二值图像(灰度),但这似乎不起作用,因为我得到了下面提到的错误
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'
错误的异常消息是错误的
cv2.imshow
不处理二进制数组。根据this答案,可接受的类型为uint8
、uint16
、int
、float
和double
您应该能够使用以下命令将数组转换为
uint8
:这将给您留下介于0和1之间的值,这些值都非常暗。如果将数组乘以255,则颜色应为预期的黑色和白色:
来自skimage的数据图像的完整示例:
你的格式不对。您需要将其更改为float32。这是opencv的常见错误。您可以更改此行以将其转换为float32,它应该可以正常工作
相关问题 更多 >
编程相关推荐