使用OpenCV(Python)读取图像时颜色不正确

6

我刚开始学习OpenCV和Python。我已经安装好了它,并使用简单的脚本开始使用。我想加载一张彩色图片和同一张黑白图片。下面是简单的代码:

import cv2
import numpy as np
from matplotlib import pyplot as plt

img1 = cv2.imread("tiger.jpg",3)
img2 = cv2.imread("tiger.jpg",0)

plt.subplot(121),plt.imshow(img1),plt.title('TIGER_COLOR')
plt.subplot(122),plt.imshow(img2),plt.title('TIGER_BW')

plt.show()

好的,这是我正在使用的图像及其真实颜色:https://pixabay.com/en/tiger-cub-tiger-cub-big-cat-feline-165189/

问题是,当我展示这段代码的结果时,我得到了这个:

enter image description here

正如你所看到的,两张图片都有错误的颜色。我认为这可能是因为我正在使用一个开源的图形驱动程序,但我安装了私有的驱动程序,问题仍然存在。

我该如何解决这个问题?问题出在哪里?有任何想法吗? 谢谢!


1
OpenCV 使用 BGR,而不是 RGB。因此,在显示图像 rgb = img1[(2,1,0),:,:] 之前,只需交换 B 和 R 通道,或者使用 cvtColor。灰度图像没问题,您只需要使用 colormap。使用 plt.imshow(img2, cmap='gray') - Miki
1个回答

17

OpenCV不使用RGB,而是使用BGR(代表蓝、绿、红)。您需要交换红色和蓝色的顺序。

img1 = cv2.imread("tiger.jpg", 3)

b,g,r = cv2.split(img1)           # get b, g, r
rgb_img1 = cv2.merge([r,g,b])     # switch it to r, g, b

plt.subplot(121),plt.imshow(rgb_img1),plt.title('TIGER_COLOR')

此外,您的灰度图像很好,但是您正在使用一种调色板。请确保使用

plt.imshow(img2, cmap='gray')

2
谢谢!所有问题都是由于RGB和BGR以及颜色映射之间的错误导致的。为什么OpenCV决定使用非普遍的系统(BGR)而不是RGB呢? - Carlos

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接