Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python (scikit图像)保存时,图像显示为黑色_Python_Image_Opencv_Computer Vision_Scikit Image - Fatal编程技术网

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)
要得到这张图像

在这一点上,我有两个问题:

  • 当我试图保存此图像(作为.pdf或.jpg)时,生成的图像是纯黑色的。将此图像转换为PIL格式并使用

    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灰色)

  • 要将图像转换为灰度,我在函数cvtColor中得到错误
    错误:(-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转换为算法可以处理的内容。请参阅参考文档和断言错误。