我是计算机视觉和图像处理的新手,我正在使用此代码
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可视化图像
此时我有两个问题:
当我尝试保存此图像(作为.pdf或.jpg)时,生成的图像为纯黑色。将此图像转换为PIL格式并使用
进行检查 hog_img_pil = Image.fromarray(hog_img)
hog_img_pil.show()
仍然将图像显示为纯黑色。为什么会发生这种情况?我该如何解决?
当我尝试运行此代码时
hog_img = cv2.cvtColor(hog_img, cv2.COLOR_BGR2GRAY)
将图像转换为灰度我收到错误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
。
在此期间我将继续调试
感谢您的任何想法:)
答案 0 :(得分:0)
使用hog_img_inv = cv2.bitwise_not(hog_img)
反转图像并使用
plt.figure(figsize=(15,10))
plt.imshow(hog_img_uint8_inv)
表明这些线条实际上在那里,但非常微弱(我已将这些图像包含在这里用于通信,但你可以看到它(但相信我,它就在那里))。我将不得不对图像进行更多处理以使线条更加清晰。
正在运行print(hog_img.dtype)
时显示dtype为float64
时(我认为)它应该是uint8
。我通过运行hog_img_uint8 = hog_img.astype(np.uint8)
来修复此问题,这似乎解决了将图像传递给其他算法(例如cv2.adaptiveThreshold)的问题。
答案 1 :(得分:0)
如果遇到同样的问题。但如果您查看docu内部,他们也会使用此代码进行更好的可视化:
status
但我仍有同样的问题。使用matplotlib进行可视化是没有问题的。使用opencv(或skimage)保存图像只保存黑色图像...