美文网首页
cv2.imread读出来是什么,img[:, :, ::-1]

cv2.imread读出来是什么,img[:, :, ::-1]

作者: 曦宝 | 来源:发表于2023-06-06 10:26 被阅读0次
img = cv2.imread(img_path)
print(img.shape)
img = img[:, :, ::-1]
image.png

首先说cv2.imread读出来的是什么

从上图可以看出,cv2.imread返回的结果是一个三维数组,图片的高度 * 宽度 * 3,这里的3表示RGB三个通道,R--red红色,G--green绿色,B--blue蓝色。

拿出一个切片,比如红色通道,某点的值,就是图片坐标上,该点的明暗程度,图片的左上角为坐标的(0,0)点,右下角为(hmax,wmax)点。

还有这里的RGB并不是众生平等的,R占据相对重要的通道,B占据相对不重要的通道。

接下来说img = img[:, :, ::-1]

img = img[:, :, ::-1]

这句话的意思就是数组的第一个维度和第二个维度不变,第三个维度的数组翻转。

也就是说,图片的高度和宽度不变,红色通道和蓝色通道翻转,使得蓝色通道占据相对重要的通道,红色通道占据相对不重要的通道。这里注意一下,是矩阵翻转,所以是从RGB变成了BGR,中间的通道G也就是green,是一直不变的。

下面是原图,也就是RGB通道的图。


原图

下面是翻转之后的图,也就是BGR通道的图。


BGR

下面是三个通道相互转换的方法

BGR转为RGB:rgb = bgr[...,::-1]
RGB转为BGR:bgr = rgb[...,::-1] 或 out = out[:, :, [2, 1, 0]]
RGB转为GBR:gbr = rgb[...,[2,0,1]]

最后说为什么要转换通道

1.RGB符合人类实际
2.彩色显示器,图像采集器都是RGB的
3.opencv读出来的图像默认是BGR通道,是因为caffee,是历史问题,是早年为了兼容某些硬件

更具体的参考下面网址。
https://blog.csdn.net/weixin_52527544/article/details/128008221

相关文章

网友评论

      本文标题:cv2.imread读出来是什么,img[:, :, ::-1]

      本文链接:https://www.haomeiwen.com/subject/unqgedtx.html