matplotlib显示opencv读取的图片颜色异常,BGR转RGB的两种方式:cv2.cvtColor与img[:,:,::-1]

《博主简介》

小伙伴们好,我是阿旭。专注于人工智能、AIGC、python、计算机视觉相关分享研究。

更多学习资源,可关注公-仲-hao:【阿旭算法与机器学习】,共同学习交流~

👍感谢小伙伴们点赞、关注!

《------往期经典推荐------》

一、【100个深度学习实战项目】【链接】,持续更新~~

二、机器学习实战专栏【链接】 ,已更新31期,欢迎关注,持续更新中~~
三、深度学习【Pytorch】专栏【链接】
四、【Stable Diffusion绘画系列】专栏【链接】
五、YOLOv8改进专栏【链接】持续更新中~~
六、YOLO性能对比专栏【链接】,持续更新中~

《------正文------》

目录

问题描述

matplotlib.pyplot的imshow()方法广泛用于显示图像,其在显示opencv加载的图像时会出现颜色异常,代码如下所示:

python 复制代码
# --coding:utf-8--
import cv2
from matplotlib import pyplot as plt
import matplotlib
matplotlib.use('TkAgg')

# opencv读取图片并显示
img = cv2.imread('1.jpg')
cv2.imshow('image', img)
cv2.waitKey(0)
cv2.destroyAllWindows()

# matplotlib显示图片
plt.imshow(img)
plt.show()

原始图片:

matplotlib显示图片

通过对比可以发现,下方的图片偏蓝,如左侧的红色小车变为了蓝色广告牌也变成了蓝色

原因分析

opencv默认加载的图像时使用的是BGR方式,而matplotlib使用的RGB方式进行显示的。因此matplotlib进行显示时会将B通道当做R通道,R通道当做B通道。从而图片颜色显示异常。

解决办法

将opencv默认加载的图像的BGR转变为RGB,然后再进行显示。

方法一:cv2.cvtColor(img,cv2.COLOR_BGR2RGB)

直接使用cv2.cvtColor(img,cv2.COLOR_BGR2RGB)将BGR转为RGB,如下所示:

python 复制代码
# matplotlib显示图片
img_rgb = cv2.cvtColor(img,cv2.COLOR_BGR2RGB)
plt.imshow(img_rgb)
plt.show()

方法二:img[:,:,::-1]

直接通过numpy切片的方式,进行通道转换,使用img[:,:,::-1],代码如下所示:

python 复制代码
plt.imshow(img[:,:,::-1])
plt.show()

解释说明:

在Python编程语言中,特别是使用NumPy库处理多维数组(例如图像数据)时,img[:,:,::-1]这样的语法是用于索引和切片数组的。

具体来说,img是一个三维数组,其中:

  • 第一个维度(:)代表图像的高度(或行数);
  • 第二个维度(:)代表图像的宽度(或列数);
  • 第三个维度(::-1)代表图像的颜色通道(如RGB)。
    img[:,:,::-1]的操作分解如下:
  • img[:,:,...]:表示选取整个图像的所有行和列;
  • [::-1]:这是一个步长为-1的切片操作,意味着它会反转第三个维度上的数据顺序。
    由于第三个维度通常代表颜色通道,对于一个RGB图像来说:
  • 第一个通道是红色(R);
  • 第二个通道是绿色(G);
  • 第三个通道是蓝色(B)。
    [::-1]会将这三个通道的顺序从RGB改为BGR。因此,img[:,:,::-1]通常用于在处理图像时,将图像的颜色通道从RGB转换到BGR。

如果内容对你有帮助,感谢点赞关注,更多精彩内容持续更新~~

关注文末名片G-Z-H:【阿旭算法与机器学习】,发送【开源】可获取更多学习资源

相关推荐
robot_大菜鸟25 分钟前
python_openCV_计算图片中的区域的黑色比例
开发语言·python·opencv
醉后才知酒浓26 分钟前
图像处理之蒸馏
图像处理·人工智能·深度学习·计算机视觉
炸弹气旋1 小时前
基于CNN卷积神经网络迁移学习的图像识别实现
人工智能·深度学习·神经网络·计算机视觉·cnn·自动驾驶·迁移学习
python_知世1 小时前
时下改变AI的6大NLP语言模型
人工智能·深度学习·自然语言处理·nlp·大语言模型·ai大模型·大模型应用
愤怒的可乐1 小时前
Sentence-BERT实现文本匹配【CoSENT损失】
人工智能·深度学习·bert
冻感糕人~1 小时前
HRGraph: 利用大型语言模型(LLMs)构建基于信息传播的HR数据知识图谱与职位推荐
人工智能·深度学习·自然语言处理·知识图谱·ai大模型·llms·大模型应用
花生糖@1 小时前
Midjourney即将推出的AI生视频产品:CEO洞见分享
人工智能·ai·aigc·midjourney
小言从不摸鱼1 小时前
【NLP自然语言处理】文本处理的基本方法
人工智能·python·自然语言处理
远杰数控走心机厂家1 小时前
数控走心机几个轴
人工智能·搜索引擎·基带工程
日记成书2 小时前
【无线通信发展史⑨】1791年路易吉·伽伐尼-关于动物电的研究与1800年亚历山大·伏打伯爵-电池:伏打电池
网络·人工智能·学习·职场和发展·信息与通信