我自己的一个体会,在学习机器学习和深度学习的过程里,包括阅读模型源码的过程里,一个比较大的阻碍是对numpy掌握的不熟,有的时候对矩阵的维度,矩阵中每个元素值的含义晕乎乎的.

本文就以一个2 x 2 x 3的三维矩阵为例,说明矩阵是如何表示图像的.

3d array表示一个图片.比如对ex = numpy.array([ [ [1, 2, 3], [4, 5, 6] ], [ [7, 8, 9], [0, 1, 2] ] ]),ex代表的维度是怎样的?

其实类似于list of list.

  1. 先看最外层的list内有几个list,可以看到有2个[],分别为[ [1, 2, 3], [4, 5, 6] ] 和 [ [7, 8, 9], [0, 1, 2] ],我们分别称之为l1,l2 所以第一个维度是2
  2. 再看上述的l1,l2内有几个list.以[ [1, 2, 3], [4, 5, 6] ]为例,有2个,分别为[1,2,3] 和 [4,5,6] 我们称之为l3,l4 所以第二个维度是2
  3. 再看上述的l3,l4有几个list.以[1,2,3]为例,可以看到已经不再有list了.内部是3个数.所以这是最后一个维度了,维度为3.

所以,我们现在就得出ex是一个2 X 2 X 3的矩阵.假设说它代表一副图的话,代表的就是一个3通道的图片,图片尺寸为2 X 2.

即我们有4个像素点,第一个像素点的rgb值为(1,2,3) 第二个像素点rgb值为(4,5,6)..以此类推.

看一段对图片做预处理的代码.

在用opencv读图像时,是按bgr的顺序读的.

def prep_image(img, inp_dim):
"""
Prepare image for inputting to the neural network. Returns a Variable
"""
img = (letterbox_image(img, (inp_dim, inp_dim)))
img = img[:,:,::-1].transpose((2,0,1)).copy()

重点看img = img[:,:,::-1].transpose((2,0,1)).copy().

::-1表示在这一维度做倒序.通过前面的分析知道第三个维度表示rgb,所以img[:,:,::-1]可以表示前两个维度不变,第三个维度倒序,则此时bgr的表示变成了rgb. 此时矩阵代表的是h x w x c.我们想转换成c x h x w. 原先的第0,1,2维度分别代表h,w,c. 则transpose((2,0,1))代表转换成矩阵c x h x w.

结合下面测试代码体会一下,看看每个元素此时表达什么含义.相信对用三维矩阵表达图片应该不再有问题了.

import numpy
ex = numpy.array([ [ [1, 2, 3], [4, 5, 6] ], [ [7, 8, 9], [0, 1, 2] ] ])
#2 x 2 x 3 print(ex[0][0][0])
print(ex[0][0][1])
print(ex[0][0][2]) ex=ex[:,:,::-1]
print(ex)
print(ex[0][0][0])
print(ex[0][0][1])
print(ex[0][0][2]) print(ex.transpose((2,0,1)))

输出如下:

numpy表示图片详解的更多相关文章

  1. 减少HTTP请求之合并图片详解(大型网站优化技术)

    原文:减少HTTP请求之合并图片详解(大型网站优化技术) 一.相关知识讲解 看过雅虎的前端优化35条建议,都知道优化前端是有多么重要.页面的加载速度直接影响到用户的体验.80%的终端用户响应时间都花在 ...

  2. npm安装vue详细教程(图片详解)

    npm安装vue详细教程(图片详解) 一.总结 一句话总结:整个安装流程照着教程来,注意系统环境变量的配置,注意一下npm的本地仓库和缓存位置 教程 系统环境变量 仓库 缓存 1.什么情况下最适合用n ...

  3. python常用模块numpy解析(详解)

    numpy模块 关注公众号"轻松学编程"了解更多. 以下命令都是在浏览器中输入. cmd命令窗口输入:jupyter notebook 后打开浏览器输入网址http://local ...

  4. numpy模块(详解)

    重点 索引和切片 级联 聚合操作 统计操作 矩阵 什么是数据分析 是把隐藏在一些看似杂乱无章的数据背后的信息提炼出来,总结出所研究对象的内在规律 数据分析是用适当的方法对收集来的大量数据进行分析,帮助 ...

  5. webp图片详解

    WebP(发音 weppy),是一种支持有损压缩和无损压缩的图片文件格式,派生自图像编码格式 VP8.根据 Google 的测试,无损压缩后的 WebP 比 PNG 文件少了 45% 的文件大小,即使 ...

  6. numpy.where() 用法详解

    numpy.where (condition[, x, y]) numpy.where() 有两种用法: 1. np.where(condition, x, y) 满足条件(condition),输出 ...

  7. numpy sum axis详解

    axis 先看懂numpy.argmax的含义.那么numpy.sum就非常好理解. 看一维的例子. import numpy as np a = np.array([1, 5, 5, 2]) pri ...

  8. numpy.linspace使用详解

    numpy.linspace(start, stop, num=50, endpoint=True, retstep=False, dtype=None) 在指定的间隔内返回均匀间隔的数字. 返回nu ...

  9. Android 转载一篇.9图片详解文章

    感谢作者,原文链接为 http://blog.csdn.net/ouyang_peng/article/details/9242889

随机推荐

  1. 创建dll动态链接库,并使用java调用

    参考文章:http://www.cnblogs.com/matthew-2013/p/3480296.html http://blog.csdn.net/g710710/article/details ...

  2. Android零基础入门第36节:Android系统事件的响应

    原文:Android零基础入门第36节:Android系统事件的响应 在开发Android应用时,有时候可能需要让应用程序随系统设置而进行调整,比如判断系统的屏幕方向.判断系统方向的方向导航设备等.除 ...

  3. Android零基础入门第78节:四大组件的纽带——Intent

    前面学习Activity时己经多次使用了 Intent,当一个Activity需要启动另一个Activity时, 程序并没有直接告诉系统要启动哪个Activity,而是通过Intent来表达自己的意图 ...

  4. strlen源码剖析(可查看glibc和VC的CRT源代码)

    学习高效编程的有效途径之一就是阅读高手写的源代码,CRT(C/C++ Runtime Library)作为底层的函数库,实现必然高效.恰好手中就有glibc和VC的CRT源代码,于是挑了一个相对简单的 ...

  5. Google地图下载工具代码

    // // Google Map Tiles Downloader in C# by coolypf // No rights reserved, neither warranty nor guara ...

  6. EasyTransaction主要源码分析

    EasyTransaction是一个全功能的分布式事务框架,以下特性摘抄自其首页:https://github.com/QNJR-GROUP/EasyTransaction 一个框架包含多种事务形态, ...

  7. 程序员修仙之路--优雅快速的统计千万级别uv(留言送书)

    菜菜,咱们网站现在有多少PV和UV了? Y总,咱们没有统计pv和uv的系统,预估大约有一千万uv吧 写一个统计uv和pv的系统吧 网上有现成的,直接接入一个不行吗? 别人的不太放心,毕竟自己写的,自己 ...

  8. U盘刻录kali linux启动盘提示找不到镜像解决方案

    选择“继续”后会来到步骤菜单,选择从shell启动,命令 df -m 查看当前磁盘挂载情况,看到  /media 目录 输入命令 umount /media 进行挂载然后输入 exit 退出

  9. 球体的双目视觉定位(matlab,附代码)

    球体的双目视觉定位(matlab,附代码) 标签(空格分隔): 机器视觉 引言 双目视觉定位是我们的一个课程设计,最近刚做完,拿出来与大家分享一下,实验的目的是在拍摄的照片中识别球体,并求出该球体到相 ...

  10. java8 异步api、循环、日期

    java8 异步api.循环.日期 转载请注明出处:https://www.cnblogs.com/funnyzpc/p/10801470.html 异步api 对于多任务耗时的业务场景,一般我们会用 ...