无法理解这个图像读取python代码

时间:2018-01-07 14:42:17

标签: python python-3.x

import matplotlib.pyplot as plt
import matplotlib.image as mpimg
import numpy as np

my_image = mpimg.imread('mountain.png')
print('The image is:- ',type(image), 
         'dimensions is:-', image.shape)

print(image[:,:,0])
print(image[:,:,1])
print(image[:,:,2])

我无法理解image[:,:,0]image[:,:,1]是什么意思?

2 个答案:

答案 0 :(得分:1)

将颜色rgb图像读取为三维阵列。前两个维度是x和y,第三个维度是红色,绿色,蓝色的颜色。

括号表示法用于以[x, y, c]的形式引用此三维数组的子集。冒号表示应该选择该维度中的所有值。

因此image[:,:,0]指的是红色通道,image[:,:,1]指的是蓝色通道,image[:,:,2]指的是绿色通道。

答案 1 :(得分:1)

大多数图像表示使用带有 RGB色彩空间的位图 。图像被视为像素矩形,我们为每个像素指定一种特定的颜色。然后将颜色表示为3元组:其中元组的第一项表示红色强度,第二项表示绿色的强度>,最后一个是 blue 的强度。一个重要的注意事项是,这是图像的 a 表示:还有其他的表示。例如使用矢量图形。此外还有其他颜色空间。

这意味着如果我们将图像加载到内存中,我们会得到一个形状为(h, w, 3)h图像的高度的矩阵(以像素为单位),以及w图片的宽度(再次以像素为单位)。

现在numpy允许高级索引:我们可以使用image[:,:,0]构建视图。这意味着我们构造了一个(h, w)形状的矩阵,对于索引为[i, j]的项目,我们获得了原始图像中[i, j, 0]处的值。因此,我们获得了一个只考虑 red 频道强度的图像。

同样适用于image[:,:,1]image[:,:,2],其中我们将绿色 blue 频道考虑在内。该表示使用浮点数,1.0表示最大强度,0.0表示最低强度。例如,如果(red, green, blue) = (1.0, 0.5, 0.0),这是大多数人看到的颜色黄色