cv2 灰度图有 3 个通道和奇怪的蓝黄色调

cv2 grayscale has 3 channels and a weird blueish-yellowish tint

我对 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_BGR2RGBcv2.IMREAD_GRAYSCALE 都是告诉 imread()cvtColor() 函数如何表现的标志(例如 return 灰度图像)。虽然它们都被函数接受,但它们可能不会执行您希望它们执行的操作,因此建议仅使用为每个函数指定的标志。任何以 IMREAD_ 开头的标志只能与 OpenCV 的 imread() 函数一起使用。同样,任何以 COLOR_ 开头的标志只能与 cvtColor()

一起使用