Matplotlib imshow显示RGB图像色彩失真问题求助
问题解答
这跟colormap完全没关系,问题出在图像的通道顺序上!
你用cv2.imread()读取图像时,OpenCV默认会把图像以BGR的通道顺序加载到内存里;但matplotlib.pyplot.imshow()显示图像时,默认是按照RGB的通道顺序来解析的。通道顺序搞反了,自然就会出现偏蓝的色调——因为原本的红色通道被当成了蓝色通道来显示,蓝色通道则被当成了红色通道。
要解决这个问题,有两种简单的方法:
方法1:用OpenCV的通道转换函数
直接调用cv2.cvtColor()把BGR格式转换成RGB格式:
import cv2 import matplotlib.pyplot as plt lena = cv2.imread("lena.jpg") # 转换通道顺序:BGR -> RGB lena_rgb = cv2.cvtColor(lena, cv2.COLOR_BGR2RGB) plt.imshow(lena_rgb) plt.show()
方法2:直接通过数组切片反转通道
因为图像在numpy数组里是按[高度, 宽度, 通道]存储的,所以可以直接对通道维度进行反转:
import cv2 import matplotlib.pyplot as plt lena = cv2.imread("lena.jpg") # 反转最后一个维度(通道维度),实现BGR -> RGB plt.imshow(lena[:, :, ::-1]) plt.show()
两种方法都能让matplotlib正确显示RGB图像,选你觉得顺手的就行~
内容的提问来源于stack exchange,提问作者dberga
相关产品推荐
相关产品推荐

