1.三维数组的索引
三维数组的索引中,第一个维度是矩阵个数,第二个维度是行,第三个维度是列。
关于三维数组的[::-1]的倒序操作:
以下为例:
可以看到,将 [::-1]放在第一维,产生的效果是三个矩阵之间的倒序。
将 [::-1]放在第二维,产生的效果是行的倒序
将 [::-1]放在第二维,产生的效果是列的倒序
另外,关于[...,]的操作:
还是以a3为例,
可以看到,...相当于省略,省略了写出前两维,然后默认取所有第一维(个数)和第二维(行)的第1列数据。
2.cv2.imread()
代码中经常看到 img = img[:, :, ::-1]这样的代码,解释说是BGR通道转化为RGB,并且网上查到有说 图像张量有三个维度,分别表示宽度、长度和颜色通道。image[:,:,::-1]的作用是对颜色通道把RGB转换成BGR,image[:, ::-1, :]的作用是把图像左右翻转,image[::-1, :, :]的作用是把图像上下颠倒。
图像张量有三个维度,分别表示宽度、长度和颜色通道似乎和我上面理解的三维数组的第一维代表个数,第二三维分别代表行列的情况不太一样。是因为张量和数组的索引机制不一样吗?
在验证这个问题之前,先要确认cv2.imread()读进来的数据是张量还是数组?
参考:【OpenCV 完整例程】01. 图像的读取(cv2.imread)_youcans的博客-CSDN博客_opencv读取图片
这篇文章给出了:
所以可以证明cv2.imread()读进来的确实是数组而不是张量,所以上面看到的阐述有误。而 三个维度分别表示宽度、长度和颜色通道是对的,因为图像读出来的数组是以[R,G,B],[R,G,B]这样三个三个的排列,所以原本理解为行的维度在这里是颜色通道,而这里的宽度相当于原本理解的矩阵个数。
参考:cv2.imread()读取数据的详细过程_代码小白的成长的博客-CSDN博客_cv2.imread
3.三维张量的索引
关于张量的索引可以参考:深度学习——张量的索引、分片、合并及调整维度-拜师资源博客 (17baishi.com)http://blog.17baishi.com/14678/