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:【阿旭算法与机器学习】,发送【开源】可获取更多学习资源

相关推荐
wb043072013 小时前
性能优化实战:基于方法执行监控与AI调用链分析
java·人工智能·spring boot·语言模型·性能优化
AAA小肥杨3 小时前
基于k8s的Python的分布式深度学习训练平台搭建简单实践
人工智能·分布式·python·ai·kubernetes·gpu
mit6.8245 小时前
[Agent可视化] 配置系统 | 实现AI模型切换 | 热重载机制 | fsnotify库(go)
开发语言·人工智能·golang
Percent_bigdata6 小时前
百分点科技发布中国首个AI原生GEO产品Generforce,助力品牌决胜AI搜索新时代
人工智能·科技·ai-native
Gloria_niki6 小时前
YOLOv4 学习总结
人工智能·计算机视觉·目标跟踪
FriendshipT6 小时前
目标检测:使用自己的数据集微调DEIMv2进行物体检测
人工智能·pytorch·python·目标检测·计算机视觉
海森大数据6 小时前
三步破局:一致性轨迹强化学习开启扩散语言模型“又快又好”推理新时代
人工智能·语言模型·自然语言处理
Tencent_TCB6 小时前
云开发CloudBase AI+实战:快速搭建AI小程序全流程指南
人工智能·ai·小程序·ai编程·云开发
Sunhen_Qiletian6 小时前
基于OpenCV与Python的身份证号码识别案例详解
人工智能·opencv·计算机视觉
AustinCyy6 小时前
【论文笔记】Introduction to Explainable AI
论文阅读·人工智能