图像领域img[:,:,::-1]的理解

先开门见山,img[:,:,::-1]的作用就是实现RGB到BGR通道的转换 (若图片一开始就是BGR的,就是实现从BGR到RGB的转换)。

对于列表img进行img[:,:,::-1]的作用是列表数组左右翻转,例如:


import numpy as np
 
a = np.arange(27).reshape(3,3,3)
print(a)
'''
[[[ 0  1  2]
  [ 3  4  5]
  [ 6  7  8]]
 [[ 9 10 11]
  [12 13 14]
  [15 16 17]]
 [[18 19 20]
  [21 22 23]
  [24 25 26]]]
'''
b = a[:,:,::-1]
print(b)
'''
[[[ 2  1  0]
  [ 5  4  3]
  [ 8  7  6]]
 [[11 10  9]
  [14 13 12]
  [17 16 15]]
 [[20 19 18]
  [23 22 21]
  [26 25 24]]]
'''

可以明确看出,[:,:,::-1]的作用就是对数组进行左右翻转。那为什么对于图像而言却能实现RGB通道转换为BGR通道呢?先看一些读取图片的方法是怎么读取吧

一般有opencv(cv2)和matplotlib(plt)的读取方式:(cv2把图片读取后是把图片读成BGR形式的,plt则是读成RGB形式)

证明如下:

以一张图片为样例

正常显示就是以RGB为格式显示的。

当我们用plt读取时:


from matplotlib import pyplot as plt
import cv2
img_name = r'C:\Users\Administrator\Desktop\airball\val\35.jpg'
img = plt.imread(img_name)
print(img)

打印出来的是:

取第一个值,(129,80,73),在网上以查,颜色是深棕色的,确实跟图片的左上角是一致的:

证明plt读取图片的方式确实是以RGB的格式读取。

接着:

当执行 [:,:,::-1]后,数组会左右翻折:

from matplotlib import pyplot as plt
import cv2
img_name = r'C:\Users\Administrator\Desktop\airball\val\35.jpg'
img = plt.imread(img_name)
print(img)
print('-----------------------')
img = img[:, :, ::-1]
print(img)

 

可以看到(129 80 73)变成(73 80 129)。

通过网上查询(73 80 129)是什么颜色的,发现是蓝色的。

所以,如

from matplotlib import pyplot as plt
import cv2
img_name = r'C:\Users\Administrator\Desktop\airball\val\35.jpg'
img = plt.imread(img_name)
print(img)
print('-----------------------')
img = img[:, :, ::-1]
plt.imshow(img)
plt.show()

果拆测没错的话,这是后显示出来的图片应该左上角就是蓝色的,我们试试:


果然左上角就是蓝色的。因此,这应该是BRG格式的图片了。所以得证,[:,:,::-1]的作用就是把RGB(或BRG)转换成BGR(或者RGB)。

=============================

插一句题外话,用opencv(即cv2)读取图片,是以BGR的形式来读取的。我们用cv2的imshow()函数显示图片发现跟我们打开图片的样子一样,是因为cv2的imshow()又把BGR转回RGB再显示。但cv2确实是以BGR形式读取图片的,而plt则是以RGB形式。
————————————————
版权声明:本文为CSDN博主「ZJE_ANDY」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/u014453898/article/details/93716118

  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值