0 前言
我们在做图像处理的时候会遇到三维数组,也可以称为三维张量(tensor)。我们可以将三维数组想象成为一个立方体,第一维度理解为立方体的长,第二维度理解为宽,彩色图片是3通道的,所以第三维“图片通道”想象成深度。用立方体中直观展示:
1 numpy中的三维数组
通过 np.zeros( ) 创建一个2行4列3个通道的三维数组,并给第1行第2列第1通道赋值为1。
import numpy as np
def test3D():
data_array = np.zeros((2, 4, 3), dtype=np.int)
data_array[1, 2, 1] = 1
print(data_array)
test3D()
得到以下结果:
[[[0 0 0]
[0 0 0]
[0 0 0]
[0 0 0]]
[[0 0 0]
[0 0 0]
[0 1 0]
[0 0 0]]]
通过观察数值(2,4,3)可以理解:这里的2行变成了2个“更大规模的行”,4列变成了4个“行”,3通道变成了3个“列”。
2 cv2.imread( )中的三维数组
读取一张彩色图片:
import cv2
img = cv2.imread('./food-11/testing/0000.jpg')
print(img)
打印结果如下:
[[[ 0 10 10]
[ 1 11 11]
[ 4 14 14]
...
[ 12 17 15]
[ 11 18 15]
[ 12 19 16]]
[[ 0 10 10]
[ 1 11 11]
[ 3 13 13]
...
[ 10 17 14]
[ 10 17 14]
[ 10 17 14]]
[[ 2 12 12]
[ 3 13 13]
[ 3 13 13]
...
[ 9 15 14]
[ 10 16 15]
[ 8 16 15]]
...
[[131 137 112]
[132 138 113]
[136 140 115]
...
[135 135 117]
[138 136 118]
[138 136 118]]
[[132 138 113]
[134 140 115]
[137 141 116]
...
[137 138 118]
[139 138 118]
[136 135 115]]
[[134 140 115]
[135 141 116]
[139 143 118]
...
[138 139 119]
[139 138 118]
[135 134 114]]]
因为cv2.imread( )是读取图片的,所有每个维度是有含义的。这里cv2.imread( )默认将图片转换成了一个三维数组,"[[["中最里面的一维代表的是一个像素的三个通道的灰度值,第二个维度代表的是第一行所有像素的灰度值,第三个维度,也就是最外面的一个维度代表的是整张图片。
参考:
https://blog.csdn.net/xf8964/article/details/90524020
https://blog.csdn.net/gaifuxi9518/article/details/88948690
https://blog.csdn.net/qq_34840129/article/details/86294530