OpenCV在加载时为彩色图像提供错误的颜色


76

我正在Python OpenCV中加载彩色图像并将其绘制出来。但是,我得到的图像的颜色都混合了。

这是代码:

import cv2
import numpy as np
from numpy import array, arange, uint8 
from matplotlib import pyplot as plt


img = cv2.imread('lena_caption.png', cv2.IMREAD_COLOR)
bw_img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

images = []
images.append(img)
images.append(bw_img)

titles = ['Original Image','BW Image']

for i in xrange(len(images)):
    plt.subplot(1,2,i+1),plt.imshow(images[i],'gray')
    plt.title(titles[i])
    plt.xticks([]),plt.yticks([])

plt.show()

这是原始图片: 在此处输入图片说明

这是绘制的图像: 在此处输入图片说明

Answers:


165

OpenCV使用BGR作为图像的默认颜色顺序,matplotlib使用RGB。当您在matplotlib中显示加载有OpenCv的图像时,通道将回到最前面。

解决此问题的最简单方法是使用OpenCV将其显式转换回RGB,就像创建灰度图像时一样。

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

然后在您的情节中使用它。


8
当你读文件,你还可以用它在同一行img = cv2.imread('lena_caption.png', cv2.COLOR_BGR2RGB)
旋出

18

作为上一个答案的替代方法,您可以使用(速度稍快)

img = cv2.imread('lena_caption.png')[...,::-1]

%timeit [cv2.cvtColor(cv2.imread(f), cv2.COLOR_BGR2RGB) for f in files]
每个循环231毫秒±3.08毫秒(平均±标准偏差,共7次运行,每个循环1次)

%timeit [cv2.imread(f)[...,::-1] for f in files]
每个循环220 ms±1.81 ms(平均±标准偏差,共7次运行,每个循环1次)


3
没有。这就是为什么:answers.opencv.org/question/219040/…–
baldr

你能解释一下它是如何不同 RGB_img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
阿维纳什·辛格
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.