(scikit-image)HOG可视化图像在保存时显示为黑色

时间:2017-08-11 10:02:40

标签: 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', 
                        visualise=True,
                        feature_vector=True)
plt.figure(figsize=(15,10))
plt.imshow(hog_img)

获取此HOG可视化图像

enter image description here

此时我有两个问题:

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

    进行检查

    hog_img_pil = Image.fromarray(hog_img) hog_img_pil.show()

  2. 仍然将图像显示为纯黑色。为什么会发生这种情况?我该如何解决?

    1. 当我尝试运行此代码时

      hog_img = cv2.cvtColor(hog_img, cv2.COLOR_BGR2GRAY)

    2. 将图像转换为灰度我收到错误error: (-215) depth == CV_8U || depth == CV_16U || depth == CV_32F in function cvtColor。我需要做什么才能使这个图像成为灰度图像?为什么会这样?

      作为附加信息,运行hog_img.shape会返回(1632, 1224),这只是图像的大小,我最初解释为表示图像已经是灰度(因为它似乎是缺少颜色通道的尺寸)。但是,当我试图运行时

      test_img_bw = cv2.adaptiveThreshold(
          src=hog_img, 
          maxValue=255, 
          adaptiveMethod=cv2.ADAPTIVE_THRESH_GAUSSIAN_C, 
          thresholdType=cv2.THRESH_BINARY, 
          blockSize=115, C=4)
      

      我收到错误error: (-215) src.type() == CV_8UC1 in function adaptiveThreshold,其中this回答似乎表明图片不是灰度。

      最后,另一点有用的信息是,在图片上运行print(hog_img.dtype)会返回float64

      在此期间我将继续调试

      感谢您的任何想法:)

2 个答案:

答案 0 :(得分:0)

  1. 使用hog_img_inv = cv2.bitwise_not(hog_img)反转图像并使用 plt.figure(figsize=(15,10)) plt.imshow(hog_img_uint8_inv) 表明这些线条实际上在那里,但非常微弱(我已将这些图像包含在这里用于通信,但你可以看到它(但相信我,它就在那里))。我将不得不对图像进行更多处理以使线条更加清晰。 enter image description here

  2. 正在运行print(hog_img.dtype)时显示dtype为float64时(我认为)它应该是uint8。我通过运行hog_img_uint8 = hog_img.astype(np.uint8)来修复此问题,这似乎解决了将图像传递给其他算法(例如cv2.adaptiveThreshold)的问题。

答案 1 :(得分:0)

如果遇到同样的问题。但如果您查看docu内部,他们也会使用此代码进行更好的可视化:

status

但我仍有同样的问题。使用matplotlib进行可视化是没有问题的。使用opencv(或skimage)保存图像只保存黑色图像...