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

pieyvz9o  于 2023-01-01  发布在  Python
关注(0)|答案(7)|浏览(134)

我在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()

以下是原始图像:

这是绘制的图像:

mrfwxfqh

mrfwxfqh1#

OpenCV使用BGR作为图像的默认颜色顺序,matplotlib使用RGB。当您在matplotlib中显示用OpenCV加载的图像时,通道将从后到前。
解决这个问题的最简单方法是使用OpenCV显式地将其转换回RGB,就像创建灰度图像时所做的那样。

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

然后把它用在你的情节中。

cunj1qz1

cunj1qz12#

作为上一个答案的替代方法,您可以使用(稍微快一点)
第一个月
%timeit [cv2.cvtColor(cv2.imread(f), cv2.COLOR_BGR2RGB) for f in files]

231 ms ± 3.08 ms/循环(7次运行的平均值±标准差,每次运行1个循环)

%timeit [cv2.imread(f)[...,::-1] for f in files]

220 ms ± 1.81 ms/循环(7次运行的平均值±标准差,每次运行1个循环)

9njqaruj

9njqaruj3#

简单的单线解决方案

np.flip(img, axis=-1)

这可以转换两种方式。从RGB到BGR,以及从BGR到RGB。

iibxawm4

iibxawm44#

在阅读图像之后,通过从右到左读取矩阵,将bgr矩阵的顺序恢复为rgb:

x = cv2.imread('./image.jpg')

x=x[:,:,::-1]

plt.imshow(x)
91zkwejq

91zkwejq5#

如果您尝试使用OpenCV读取图像,它将使用BGR作为默认值。因此,您必须使用不同的方法来读取图像。我已经对您的代码进行了所需的更改,以获得所需的输出如下所示。

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

img = cv2.cvtColor(cv2.imread('lena_caption.png'), cv2.COLOR_BGR2RGB)
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()

输出:

ohtdti5x

ohtdti5x6#

您可能还想尝试cv2.IMREAD_UNCHANGED()。查看此处的更多内容,了解它与IMREAD_COLOR的区别:
https://www.geeksforgeeks.org/python-opencv-cv2-imread-method/

kuarbcqp

kuarbcqp7#

如果你在黑暗模式下使用PyCharm,你会发现从BGR到RGB是不够的,这是因为PyCharm有一个名为"Invert image outputs for dark themes"的设置
禁用首选项|语言和框架|木星|反转暗主题的图像输出应该会有所帮助
反转图像打开:

反转图像关闭:

  • 请注意,两个示例中的代码是相同的,只是PyCharm中的设置不同。*

相关问题