我正在尝试使用matplotlib渲染图像。
带有mpimg读取的图像,
import matplotlib.image as mpimg
img = mpimg.imread('img1.png',1)
plt.imshow(img)
plt.imshow()可以正确渲染图像。
带有cv2读取的图像,
import cv2
img = cv2.imread('img1.png',1)
plt.imshow(img)
颜色图似乎不匹配
我想念什么?
答案 0 :(得分:2)
opencv使用BGR,而matplotlib使用RGB
imgRGB = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
plt.imshow(imgRGB)
plt.show()
答案 1 :(得分:0)
简短答案:
这是因为matplotlib
和cv2
使用的颜色存储格式不同。
matplotlib
使用RGB时,cv2
使用BGR。
说明:
图像被读取,处理和存储为像素的二维阵列。 想象将图像分成这样的数组,每个框代表一个 pixel 。
每个像素可以依次表示为一种颜色。每种颜色可以依次表示为原色(红色,蓝色和绿色)的组合。每个原色可以依次用数字表示,表示该原色的强度。
小野鸭可以表示为(从0到255):
现在是您的问题了。 matplotlib
将使用(0,128,128)
来代表蓝绿色,而cv2
将使用(128,128,0)
来代表蓝绿色。
因此,如果您不将BGR格式转换为RGB,则图像中的蓝色将替换为红色,反之亦然。您最终将蓝绿色显示为橄榄色。
橄榄是:
因此,从BGR到RGB的简单转换就可以解决您的问题。
代码:
您只需使用以下行即可更改格式。
imageInRGB = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)