Matplotlib中的RGB图像显示:plt.imshow返回蓝色图像

31
我尝试使用matplotlib显示一张RGB图像,以下是代码:

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

# use opencv to load the image
image = cv2.imread("path/to/file/image.jpg", 1)

# convert it to numpy array
pixels = np.array(image)

然后,当我尝试用以下方式形象化图像时:

plt.imshow(pixels)
plt.show()

它返回一张全是蓝色的图片。我不明白为什么,因为这张图片本来是彩色的。我试过很多张图片,问题依旧存在。而且,在我工作的笔记本电脑上没有任何问题。

2个回答

35

由于您正在使用opencv读取和显示图像时,opencv会将图像以BGR格式而不是RGB颜色格式读取和显示,因此您才会遇到这个问题。而matplotlib使用RGB颜色格式来显示图像。 尝试使用:

image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)

pixels = np.array(image)

plt.imshow(pixels)
plt.show()

1
"pixels = np.array(image)" 我们为什么需要这个?谢谢! - Dipanwita Mallick
1
这不是必要的,不用担心。 - devansh
不需要cv2依赖。只需使用plt.imshow(img[:,:,::-1])来反转数组维度。可以参考这个机器学习模型计算树木数量的例子:https://deepforest.readthedocs.io/en/latest/getting_started.html - Maciej Skorski

29

您可以直接使用此行将BGR图像转换为RGB:

image = cv2.imread("path/to/file/image.jpg")[:,:,::-1]

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