Python (scikit图像)保存时,图像显示为黑色
我是计算机视觉和图像处理的新手,正在使用这段代码Python (scikit图像)保存时,图像显示为黑色,python,image,opencv,computer-vision,scikit-image,Python,Image,Opencv,Computer Vision,Scikit Image,我是计算机视觉和图像处理的新手,正在使用这段代码 from skimage.feature import hog hog_list, hog_img = hog(test_img_gray, orientations=8, pixels_per_cell=(16, 16), cells_per_block=(1, 1), block_norm='L1
from skimage.feature import hog
hog_list, hog_img = hog(test_img_gray,
orientations=8,
pixels_per_cell=(16, 16), cells_per_block=(1, 1),
block_norm='L1',
visualise=True,
feature_vector=True)
plt.figure(figsize=(15,10))
plt.imshow(hog_img)
要得到这张图像
在这一点上,我有两个问题:
hog\u img\u pil=Image.fromarray(hog\u img)
hog\u img\u pil.show()
hog\u img=cv2.cvt颜色(hog\u img,cv2.COLOR\u bgr2灰色)
错误:(-215)depth==CV_8U | | depth==CV_16U | depth==CV_32F。我需要做什么才能得到灰度图像?为什么会发生这种情况
作为附加信息,运行hog_img.shape
返回(16321224)
,这只是图像的大小,我最初解释为图像已经是灰度的(因为它似乎缺少颜色通道的尺寸)。然而,当我试图逃跑时
test_img_bw = cv2.adaptiveThreshold(
src=hog_img,
maxValue=255,
adaptiveMethod=cv2.ADAPTIVE_THRESH_GAUSSIAN_C,
thresholdType=cv2.THRESH_BINARY,
blockSize=115, C=4)
我在函数adaptiveThreshold中得到了错误error:(-215)src.type()==CV_8UC1,这个答案似乎表明图像不是灰度的
最后,另一个有用的信息是,在图像上运行print(hog\u img.dtype)
将返回float64
在此期间,我将继续调试
谢谢你的任何想法:)
使用hog\u img\u inv=cv2.按位\u not(hog\u img)
反转图像,并使用
plt.图(figsize=(15,10))
plt.imshow(hog\U img\U uint8\U inv)
显示线条实际上在那里,但非常模糊(为了舒适,我在这里加入了这张图片,但你可以看到它(但相信我,它就在那里))。我必须对图像进行更多的处理,以使线条更清晰。
运行print(hog\u img.dtype)
显示数据类型是float64
,而(我认为)它应该是uint8
。我通过运行hog\u img\u uint8=hog\u img.astype(np.uint8)
修复了这个问题,它似乎已经修复了将图像传递给其他算法(例如cv2.adaptiveThreshold)的问题
使用hog\u img\u inv=cv2.按位\u not(hog\u img)
反转图像,并使用
plt.图(figsize=(15,10))
plt.imshow(hog\U img\U uint8\U inv)
显示线条实际上在那里,但非常模糊(为了舒适,我在这里加入了这张图片,但你可以看到它(但相信我,它就在那里))。我必须对图像进行更多的处理,以使线条更清晰。
运行print(hog\u img.dtype)
显示数据类型是float64
,而(我认为)它应该是uint8
。我通过运行hog\u img\u uint8=hog\u img.astype(np.uint8)
修复了这个问题,它似乎已经修复了将图像传递给其他算法(例如cv2.adaptiveThreshold)的问题
如果你有同样的问题。但是,如果您查看内部,他们也会使用此代码来实现更好的可视化:
# Rescale histogram for better display
hog_image_rescaled = exposure.rescale_intensity(hog_image, in_range=(0, 0.02))
但我还是有同样的问题。使用matplotlib进行可视化没有问题。使用opencv(或Skipage)保存图像时,如果出现相同问题,则只保存黑色图像…。但是,如果您查看内部,他们也会使用此代码来实现更好的可视化:
# Rescale histogram for better display
hog_image_rescaled = exposure.rescale_intensity(hog_image, in_range=(0, 0.02))
但我还是有同样的问题。使用matplotlib进行可视化没有问题。使用opencv(或Skipage)保存图像只会保存黑色图像…很明显,所有问题都是由于数据类型错误造成的。您必须将数据从float64转换为算法可以处理的内容。参考参考文档和断言错误。很明显,所有问题都是由错误的数据类型引起的。您必须将数据从float64转换为算法可以处理的内容。请参阅参考文档和断言错误。