通常我们使用的图像都是三通道,使用python的各种工具加载以后会变成ndarray格式,我们需要弄明白在numpy矩阵里面,每一行每一列对应着的值是图片的哪些信息,否者在做图像的处理时就会显得很盲目。下面通过实验说明:
我选用的实验图片是上面这只英国短毛猫,图像维度信息为(121,121,3) 分别为width*height*channels
image_path = './vgg19/cat.jpg'
input_image = scipy.misc.imread(image_path) # (121,121,3)
print(type(input_image)) # <class 'numpy.ndarray'>
input_image_c1 = input_image[:,:,0] # 最后一个维度拿第一个值,即获取图片的第一个通道
print(input_image.shape) # (121, 121, 3)
print(input_image_c1)
'''
[[214 212 210 ... 230 233 230]
[214 213 213 ... 233 236 233]
[210 214 215 ... 231 233 229]
...
[212 211 210 ... 114 113 112]
[218 216 215 ... 104 106 121]
[217 216 218 ... 116 117 114]]
'''
print(input_image)
'''
[[[214 144 74]
[212 143 74]
[210 143 75]
...
[230 170 110]
[233 173 113]
[230 170 108]]
[[214 144 74]
[213 144 75]
[213 146 78]
...
[233 173 113]
[236 176 114]
[233 173 111]]
...
...
]
'''
#经过分析可得, input_image里面[214 144 74]三个数分别代表的是该图片的第一个位置的三个通道值
# 以行主序先排列,第一个二维矩阵的第一列代表第1个通道的第1行,第二个二维矩阵的第一列代表第1个通道的第2行
#现在假如我们需要拿到这张图片第一个通道的第一行
input_image_c1_w1 = input_image[0:1,:,0]
print(input_image_c1_w1)
#现在假如我们需要拿到这张图片第一个通道的第1列
input_image_c1_h1 = input_image[:,0:1,0]
print(input_image_c1_h1)
具体理解需要自己调试代码进行分析,这样才能透彻!