问题描述
我对 cv2 有以下问题 当我正常加载图像时,一切都很好:
img = cv2.imread(file,cv2.COLOR_BGR2RGB)
plt.imshow(img)
print(img.shape)
当我尝试加载灰度时,出现以下问题
gray = cv2.cvtColor(img,cv2.IMREAD_GRAYSCALE)
plt.imshow(gray)
print(gray.shape)
这给了我 4 个通道,但至少有一个灰色图像
但是这段代码
plt.show()
img = cv2.imread(file,cv2.IMREAD_GRAYSCALE)
print(img.shape)
plt.imshow(img)
plt.show()
给了我 1 个频道,但是一个奇怪的蓝黄色图像
我的问题是, 我可以加载具有 1 个通道的灰度图像吗? 谢谢大家的时间
解决方法
OpenCV 正确读取图像,问题在于 MatPlotLib 的 imshow()
函数,因为它将单通道图像显示为颜色图。
要指定灰度,将 cmap
参数传递给 imshow 函数,如下所示:
img = cv2.imread(file,cv2.IMREAD_GRAYSCALE)
print(img.shape)
plt.imshow(img,cmap="gray")
注意:在您的示例中,您分别使用了 cv2.imread(file,cv2.COLOR_BGR2RGB)
和 cv2.cvtColor(img,cv2.IMREAD_GRAYSCALE)
。
cv2.COLOR_BGR2RGB
和 cv2.IMREAD_GRAYSCALE
都是告诉 imread()
和 cvtColor()
函数如何表现的标志(例如,返回灰度图像)。虽然它们都被函数接受,但它们可能不会做你想让它们做的事情,因此建议只使用为每个函数指定的标志。任何以 IMREAD_
开头的标志只能与 OpenCV 的 imread()
函数一起使用。同样,任何以 COLOR_
开头的标志只能与 cvtColor()