今天是个特殊的日子 1024 ,出于本能强行写下一篇文章。伟大而又平凡的程序猿祝你节日快乐。

该文将尽可能简短的描述基于numpy,在python中使用skimage的io或PIL或其他方法读取图片后GRB数据的结构与呈现方式。

我们肉眼看到的图片无非两种(灰色和彩色),而通过编程语言转换为电脑能认识的模样也就是数字了。这些数字决定了在电脑中它是彩色还是灰色,对于彩色图片决定的方式就是——颜色通道,而最常见的就是RGB三通道了,顾名思义RGB三色通道就是指由R、G、B三个通道组成的。

这里需要说明的一点就是RGB三色道分别对应三个矩阵,而这三个矩阵都是数字向量构成的矩阵,并不代表颜色的意思(矩阵能代表颜色吗?),这里比较贴切可以理解为调色板,例如当该矩阵的某个位置的数值较大,则表示该处对应调色板使用的颜色就越”白/浅“,而越小则对应调色板使用颜色越“黑/深”。8bit的图像,对应的矩阵元素取值为0-255(也可以使用0-1表示),这里我们主要理解数据,对于图像的理解下面给出链接。

看一张图片:

这是一张彩色图片,现在通过skimage的io方法读取该图片后在numpy中呈现的数据格式如下:

通过shape得到图形形状(287,496,3),其中287表示行,496表示列,3表示分量(即三个通道分量),是不是有点蒙,下面正是本文要讲的重点,如何理解上面读取出来的数据格式?

首先我们应该按 来看,可以看到有3列 (即190 48 64对应往下的3列),这便是RGB对应的 3 个通道,从头到尾的一列数据构成了一个通道分量,共三个:

然后再来理解287,从上图中可以看到有很多的 [ 符号,其实按层次来分也就三层,这里的287表示共有287个中间层的矩阵:

最后再来看496,这个数字从哪来?上面的287个矩阵中每一个矩阵的每一列都有496个元素(数字),虽然这些数字是按照行来分块,但实际上列之间的元素才有关联,每一列的元素组合成行,构成了该通道矩阵的一行数据:

下面来看看将上面的整体矩阵分解为三个通道后的模样,做个对比是不是清楚很多了。

上面的三个通道为相同的矩阵大小,而后将三者按照通道顺序排列重叠后构成了RGB彩色图片,当然顺序有可能不是RBG,例如opencv转换后为BGR。

以上为彩色图片在numpy中解析后的理解介绍,下面是部分代码:

from skimage import iopath_c = r"G:\c.png"
color = io.imread(path_c)
print(color,color.shape)# R
print(color[:,:,0],color[:,:,0].shape)
# G
print(color[:,:,1],color[:,:,1].shape)
# B
print(color[:,:,2],color[:,:,2].shape)fig,axes = plt.subplots(1,3,figsize=(12,7))
axes[0].imshow(color[:,:,0])
axes[0].set_title('R')
axes[1].imshow(color[:,:,1])
axes[1].set_title('G')
axes[2].imshow(color[:,:,2])
axes[2].set_title('B')plt.show()

该文仅为理解图片的数据构成,跟多详细的内容还请自行Google。

图片通道理解可以看看:https://blog.csdn.net/silence2015/article/details/53789748/

如何理解图片RGB通道在python(numpy)中的数据构成相关推荐

  1. python求向量函数的雅可比矩阵_在python Numpy中求向量和矩阵的范数实例

    np.linalg.norm(求范数):linalg=linear(线性)+algebra(代数),norm则表示范数. 函数参数 x_norm=np.linalg.norm(x, ord=None, ...

  2. python二维元素向量_详解python Numpy中求向量和矩阵的范数

    在python Numpy中求向量和矩阵的范数实例 np.linalg.norm(求范数):linalg=linear(线性)+algebra(代数),norm则表示范数. 函数参数 x_norm=n ...

  3. python Numpy 中的矩阵向量乘法(np.multiply()、np.dot()、np.matmul() 和 星号(*)、@)

    python Numpy 中的矩阵向量乘法 总结 1. 对于 np.array 对象 1.1 元素乘法 用 a*b 或 np.multiply(a,b) 1.2 矩阵乘法 用 np.dot(a,b) ...

  4. python3 nonzero_浅谈python numpy中nonzero()的用法

    nonzero函数返回非零元素的目录. 返回值为元组, 两个值分别为两个维度, 包含了相应维度上非零元素的目录值. import numpy as np A = np.mat([[0,1,2,3,4, ...

  5. Python数据分析中的数据预处理:数据标准化

    [小白从小学Python.C.Java] [Python全国计算机等级考试] [Python数据分析考试必会题] ● 标题与摘要 Python数据分析中的 数据预处理:数据标准化 ● 选择题 以下关于 ...

  6. python numpy 中 np.mean(a) 跟 a.mean() 的区别

    今天查看以前写的文章时, 发现有个地方理解不了, 就是 np.mean(a) 跟 a.mean() 的区别是什么, 于是就查阅了相关资料: 官方doc: a.mean() Docstring: a.m ...

  7. 谈谈对python的理解_浅谈对python pandas中 inplace 参数的理解

    这篇文章主要介绍了对python pandas中 inplace 参数的理解,具有很好的参考价值,希望对大家有所帮助.一起跟随小编过来看看吧 pandas 中 inplace 参数在很多函数中都会有, ...

  8. python numpy矩阵的数据类型转换

    在python中,numpy矩阵的数据类型转换需要调用astype(),直接修改dtype是无效的.调用astype返回数据类型修改后的矩阵,但是源数据的类型不会变,需要再对源数据的赋值进行操作才可以 ...

  9. Python Numpy中的范数

    数学概念 范数,是具有 "长度" 概念的函数.在线性代数.泛函分析及相关的数学领域,范数是一个函数,是矢量空间内的所有矢量赋予非零的正长度或大小. 在数学上,范数包括向量范数和矩阵 ...

  10. python numpy中sum()时出现负值

    import numpy a=numpy.random.randint(1, 4095, (5000,5000)) a.sum() 结果为负值, 这是错误的,a.sum()的类型为 int32,如何做 ...

最新文章

  1. 基于Springboot实现在线考试管理系统
  2. IT规划宜分步走 忌盲目好大喜功(载)
  3. 电子政务“云”成大势
  4. [BZOJ 1150] 数据备份
  5. ES6-17 class与对象
  6. ghost还原固态硬盘_固态硬盘如何做系统盘
  7. mongodb慢查询记录
  8. 2016022604 - redis命令介绍
  9. 追踪盗窃12亿用户登录数据的网络犯罪团伙
  10. 王晓初:没有收到消息和电信合并 希望合作步伐加快
  11. 介绍一款在线仿站小工具
  12. 人性的弱点【了解鱼的需求】
  13. java高级软件工程师证书国家,看完这篇彻底明白了
  14. Python爬取码市项目
  15. 【Android App】实战项目之仿拼多多的直播带货(附源码和演示 超详细必看)
  16. 天勤python_天勤量化策略库:网格交易策略(难度:中级)
  17. Bilibili 视频下载 Python 实现
  18. 卡内基沟通与人际关系
  19. 【Linux】Linux进程的创建与管理
  20. java开发一个购物车实验,JAVAWEB购物车实验报告.doc

热门文章

  1. 行测判断推理部分之图形推理(位置)
  2. 泰拉瑞亚 服务器linux,泰拉瑞亚Linux主机打造指南
  3. 多目标优化 MOP (二):遗传算法 SPEA2 2001
  4. Java计算花费时间的模板设计模式
  5. 隐私泄露距离你我有多远?APP扩大个人隐私收集,增大隐私保护难度
  6. 巨头环伺下,青云QingCloud的云计算之路危机重重
  7. 纳米机器人最新进展(2021年)
  8. 有一个女孩 名叫花木兰
  9. ffmpeg视频滤镜中英文对照
  10. Stata: 正则表达式和文本分析