使用matplotlib绘制PNG文件时反转颜色

时间:2013-01-17 20:36:29

标签: python opencv matplotlib

我正在尝试使用matplotlib显示PNG文件,当然还有python。对于此测试,我生成了以下图像: Original File

现在,我将图像加载并转换为多维的numpy矩阵:

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

cube = cv2.imread('Graphics/Display.png')
plt.imshow(cube)
plt.ion()

当我尝试在matplotlib中绘制该图像时,颜色会反转:Plot

如果矩阵没有任何修改,为什么图中的颜色是错误的?

提前致谢。

4 个答案:

答案 0 :(得分:16)

似乎您可能会RGBBGR切换。请注意,您的果岭会保留,但所有蓝调都会变为红色。如果cube具有形状(M,N,3),请尝试使用cube[:,:,0]交换cube[:,:,2]。您可以使用numpy执行此操作:

rgb = numpy.fliplr(cube.reshape(-1,3)).reshape(cube.shape)

来自OpenCV文档:

  

注意:对于彩色图像,解码后的图像将具有   以B G R顺序存储的频道。

答案 1 :(得分:6)

尝试:

plt.imshow(cv2.cvtColor(cube, cv2.COLOR_BGR2RGB))

答案 2 :(得分:1)

正如其他人所指出的,问题是numpy数组是BGR格式,但是matplotlib期望数组以不同的方式排序。

您正在寻找scipy.misc.toimage

import scipy.misc
rgb = scipy.misc.toimage(cube)

或者,您可以使用scipy.misc.imshow()

答案 3 :(得分:0)

OpenCV加载的彩色图像处于BGR模式。但是,Matplotlib以RGB模式显示。 所以我们需要将图像从BGR转换为RGB:

plt.imshow(cv2.cvtColor(cube, cv2.COLOR_BGR2RGB))