网络服务器与网站建设,社区团购小程序模板,wordpress凡科,网站开发用的开源系统一#xff0c;问题描述
我们在利用opencv的imread读取本地图像#xff0c;进行一系列处理#xff0c;但是发现用matplotlib库的imshow#xff08;#xff09;函数显示的时候出现色彩改变#xff0c;比如图像偏黄#xff0c;偏红#xff0c;偏蓝等等#xff0c;但是对…一问题描述
我们在利用opencv的imread读取本地图像进行一系列处理但是发现用matplotlib库的imshow函数显示的时候出现色彩改变比如图像偏黄偏红偏蓝等等但是对图像的处理并没有对色彩进行过改变。比如下面图像读取显示后直接变为黄色调 代码如下
# encoding:utf-8
import cv2
import matplotlib.pyplot as plt
plt.rcParams[font.sans-serif] [SimHei] # 用来正常显示中文标签
plt.rcParams[axes.unicode_minus] False # 用来正常显示负号img_1 cv2.imread(sp_noise.jpg)
img_2 cv2.imread(medianBlur.jpg)
img_3 cv2.imread(mean.jpg)
img_4 cv2.imread(Gaussian.jpg)# 显示图形
titles [噪声图像, 中值滤波, 均值滤波 , 高斯滤波]
images [img_1, img_2, img_3, img_4]
for i in range(4):plt.subplot(2, 2, i 1)plt.imshow(images[i])plt.title(titles[i])plt.xticks([]), plt.yticks([])
plt.show()二原因分析
这种色彩偏黄的问题通常是由于图像的颜色通道解释不正确引起的。在OpenCV中cv2.imread默认读取图像为BGR颜色通道顺序而Matplotlib中plt.imshow默认将颜色通道解释为RGB。因此当你用cv2.imread读取图像并用plt.imshow显示时颜色通道顺序不匹配导致颜色显示不正确。
三解决方法
为了解决这个问题你可以在使用cv2.imread读取图像时将其转换为RGB颜色通道顺序或者在使用plt.imshow显示图像时指定颜色通道的顺序。以下是两种解决方法
1.在cv2.imread读取图像后将图像转化为RGB通道
# 将BGR图像转换为RGB
img_1 cv2.cvtColor(img_1, cv2.COLOR_BGR2RGB)
img_2 cv2.cvtColor(img_2, cv2.COLOR_BGR2RGB)
img_3 cv2.cvtColor(img_3, cv2.COLOR_BGR2RGB)
img_4 cv2.cvtColor(img_4, cv2.COLOR_BGR2RGB)
2.在plt.imshow图像后将其转换成BGR通道
plt.imshow(cv2.cvtColor(images[i], cv2.COLOR_BGR2RGB)) 四完整代码
方法1将图像转换为RGB颜色通道顺序
import cv2
import matplotlib.pyplot as pltimg_1 cv2.imread(sp_noise.jpg)
img_2 cv2.imread(medianBlur.jpg)
img_3 cv2.imread(mean.jpg)
img_4 cv2.imread(Gaussian.jpg)# 将BGR图像转换为RGB
img_1 cv2.cvtColor(img_1, cv2.COLOR_BGR2RGB)
img_2 cv2.cvtColor(img_2, cv2.COLOR_BGR2RGB)
img_3 cv2.cvtColor(img_3, cv2.COLOR_BGR2RGB)
img_4 cv2.cvtColor(img_4, cv2.COLOR_BGR2RGB)# 显示图形
titles [噪声图像, 中值滤波, 均值滤波, 高斯滤波]
images [img_1, img_2, img_3, img_4]
for i in range(4):plt.subplot(2, 2, i 1), plt.imshow(images[i])plt.title(titles[i])plt.xticks([]), plt.yticks([])
plt.show()方法2指定plt.imshow中的颜色通道顺序
import cv2
import matplotlib.pyplot as pltimg_1 cv2.imread(sp_noise.jpg)
img_2 cv2.imread(medianBlur.jpg)
img_3 cv2.imread(mean.jpg)
img_4 cv2.imread(Gaussian.jpg)# 显示图形指定颜色通道顺序为BGR
titles [噪声图像, 中值滤波, 均值滤波, 高斯滤波]
images [img_1, img_2, img_3, img_4]
for i in range(4):plt.subplot(2, 2, i 1), plt.imshow(cv2.cvtColor(images[i], cv2.COLOR_BGR2RGB))plt.title(titles[i])plt.xticks([]), plt.yticks([])
plt.show()今日一笑
范小勤“我要开挖掘机”