8

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

现在,我将图像加载并转换为多维 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 中绘制该图像时,颜色会反转:阴谋

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

提前致谢。

4

4 回答 4

23

看来您可能以某种方式RGB切换了BGR. 请注意,您的绿色被保留,但所有蓝色都变成了红色。如果cube具有形状 (M,N,3),请尝试cube[:,:,0]与. 交换cube[:,:,2]。你可以这样numpy做:

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

OpenCV 文档:

注意:在彩色图像的情况下,解码图像的通道将按 BGR 顺序存储。

于 2013-01-17T20:59:03.970 回答
17

尝试:

plt.imshow(cv2.cvtColor(cube, cv2.COLOR_BGR2RGB))
于 2014-04-24T23:48:01.427 回答
1

正如其他人指出的那样,问题在于 numpy 数组采用 BGR 格式,但 matplotlib 期望数组以不同的方式排序。

您正在寻找scipy.misc.toimage

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

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

于 2016-06-15T19:24:35.930 回答
0

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

plt.imshow(cv2.cvtColor(cube, cv2.COLOR_BGR2RGB))
于 2017-08-31T08:43:05.227 回答