matplotlib:如何正确渲染由opencv读取的图像?

时间:2019-05-20 11:01:02

标签: python opencv matplotlib

我正在尝试使用matplotlib渲染图像。

带有mpimg读取的图像,

import matplotlib.image as mpimg
img = mpimg.imread('img1.png',1)
plt.imshow(img)

plt.imshow()可以正确渲染图像。

enter image description here

带有cv2读取的图像,

import cv2
img = cv2.imread('img1.png',1)
plt.imshow(img)

颜色图似乎不匹配

enter image description here

我想念什么?

2 个答案:

答案 0 :(得分:2)

opencv使用BGR,而matplotlib使用RGB

imgRGB = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
plt.imshow(imgRGB)
plt.show()

答案 1 :(得分:0)

简短答案:

这是因为matplotlibcv2使用的颜色存储格式不同。

matplotlib使用RGB时,cv2使用BGR。

说明:

图像被读取,处理和存储为像素的二维阵列。 想象将图像分成这样的数组,每个框代表一个 pixel

enter image description here

每个像素可以依次表示为一种颜色。每种颜色可以依次表示为原色(红色,蓝色和绿色)的组合。每个原色可以依次用数字表示,表示该原色的强度。

作为一个例子,让我们以颜色为蓝绿色。 enter image description here

小野鸭可以表示为(从0到255):

  • 红色:0
  • 绿色:128
  • 蓝色:128

现在是您的问题了。 matplotlib将使用(0,128,128)来代表蓝绿色,而cv2将使用(128,128,0)来代表蓝绿色。

因此,如果您不将BGR格式转换为RGB,则图像中的蓝色将替换为红色,反之亦然。您最终将蓝绿色显示为橄榄色。 olive

橄榄是:

  • 红色:128
  • 绿色:128
  • 蓝色:128

因此,从BGR到RGB的简单转换就可以解决您的问题。

代码:

您只需使用以下行即可更改格式。

imageInRGB = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)