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

相关推荐
夜斗小神社12 小时前
【黑马RAG与Agent智能体项目】(二)提示词工程
人工智能
C++ 老炮儿的技术栈12 小时前
不调用C++/C的字符串库函数,编写函数strcmp
c语言·开发语言·c++·人工智能·windows·git·visual studio
码农三叔13 小时前
(6-1)手部、足部与末端执行器设计:仿生手设计
人工智能·架构·机器人·人形机器人
liliangcsdn13 小时前
RL中GAE的计算过程详解
大数据·人工智能·算法
yhyvc13 小时前
人形具身机器人国产/进口快速选型优先级清单
人工智能·机器人
wangmengxxw13 小时前
SpringAI-mysql
java·数据库·人工智能·mysql·springai
考證寶題庫網13 小时前
Designing and Implementing a Microsoft Azure AI Solution 微軟Azure AI-102 認證全攻略
人工智能·microsoft·azure
逄逄不是胖胖13 小时前
《动手学深度学习》-52文本预处理实现
人工智能·pytorch·python·深度学习
Pyeako13 小时前
opencv计算机视觉--图形透视(投影)变换&图形拼接
人工智能·python·opencv·计算机视觉·图片拼接·投影变换·图形透视变换
saoys13 小时前
Opencv 学习笔记:轮廓筛选 + 拟合(边界框 / 最小矩形 / 包围圆)
笔记·opencv·学习