numpy表示图片详解
我自己的一个体会,在学习机器学习和深度学习的过程里,包括阅读模型源码的过程里,一个比较大的阻碍是对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.
- 先看最外层的list内有几个list,可以看到有2个[],分别为[ [1, 2, 3], [4, 5, 6] ] 和 [ [7, 8, 9], [0, 1, 2] ],我们分别称之为l1,l2 所以第一个维度是2
- 再看上述的l1,l2内有几个list.以[ [1, 2, 3], [4, 5, 6] ]为例,有2个,分别为[1,2,3] 和 [4,5,6] 我们称之为l3,l4 所以第二个维度是2
- 再看上述的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表示图片详解的更多相关文章
- 减少HTTP请求之合并图片详解(大型网站优化技术)
原文:减少HTTP请求之合并图片详解(大型网站优化技术) 一.相关知识讲解 看过雅虎的前端优化35条建议,都知道优化前端是有多么重要.页面的加载速度直接影响到用户的体验.80%的终端用户响应时间都花在 ...
- npm安装vue详细教程(图片详解)
npm安装vue详细教程(图片详解) 一.总结 一句话总结:整个安装流程照着教程来,注意系统环境变量的配置,注意一下npm的本地仓库和缓存位置 教程 系统环境变量 仓库 缓存 1.什么情况下最适合用n ...
- python常用模块numpy解析(详解)
numpy模块 关注公众号"轻松学编程"了解更多. 以下命令都是在浏览器中输入. cmd命令窗口输入:jupyter notebook 后打开浏览器输入网址http://local ...
- numpy模块(详解)
重点 索引和切片 级联 聚合操作 统计操作 矩阵 什么是数据分析 是把隐藏在一些看似杂乱无章的数据背后的信息提炼出来,总结出所研究对象的内在规律 数据分析是用适当的方法对收集来的大量数据进行分析,帮助 ...
- webp图片详解
WebP(发音 weppy),是一种支持有损压缩和无损压缩的图片文件格式,派生自图像编码格式 VP8.根据 Google 的测试,无损压缩后的 WebP 比 PNG 文件少了 45% 的文件大小,即使 ...
- numpy.where() 用法详解
numpy.where (condition[, x, y]) numpy.where() 有两种用法: 1. np.where(condition, x, y) 满足条件(condition),输出 ...
- numpy sum axis详解
axis 先看懂numpy.argmax的含义.那么numpy.sum就非常好理解. 看一维的例子. import numpy as np a = np.array([1, 5, 5, 2]) pri ...
- numpy.linspace使用详解
numpy.linspace(start, stop, num=50, endpoint=True, retstep=False, dtype=None) 在指定的间隔内返回均匀间隔的数字. 返回nu ...
- Android 转载一篇.9图片详解文章
感谢作者,原文链接为 http://blog.csdn.net/ouyang_peng/article/details/9242889
随机推荐
- Android零基础入门第52节:自定义酷炫进度条
原文:Android零基础入门第52节:自定义酷炫进度条 Android系统默认的ProgressBar往往都不能满足实际开发需要,一般都会开发者自定义ProgressBar. 在Android开发中 ...
- ASP.NET MVC控制器Controller
控制器的定义 MVC模式下的控制器(Controller)主要负责响应用户的输入,并且在响应时可能的修改模型(Model). 之前的URL访问,通常是通过指定服务器的路径来实现,如访问URL:http ...
- 解决xp越来越慢的办法(其中有些自动备份的功能)
1.减少磁盘空间占用2.终止不常用的系统服务3.安全问题4.另外一些技巧 首先问一下,你是不是很想激活XP,不...准确的说你是不是想在ms的站上能够升级.如果答案是肯定的话,那我们就先来探讨一下安装 ...
- CSS3 GENERATOR可以同时为一个元素完成border-radius、box-shadow、gradient和opacity多项属性的设置
CSS3 GENERATOR可以同时为一个元素完成border-radius.box-shadow.gradient和opacity多项属性的设置 CSS3 GENERATOR 彩蛋爆料直击现场 CS ...
- 演练:创建和使用静态库 (C++)
我们将创建的下一个库类型是静态库 (LIB). 使用静态库是重用代码的一种绝佳方式. 您不必在自己创建的每个程序中重新实现同一例程,而只需对这些例程编写一次,然后从需要该功能的应用程序引用它们即可. ...
- Gps坐标距离计算C#实现
园子里找到两钟实现方式,做一记录,回头再认真学习,先拿来就用吧: 1.@旋风描述的算法: 场景:已知两个GPS点的经纬度坐标信息.计算两点的距离. 1. 距离/纬度关系 GPS: 22.514519, ...
- JavaScript规定了几种语言类型?
JavaScript中的每一个值都有它自己的类型,JavaScript规定了七种语言类型: 1.Undefined 2.Null 3.Boolean 4.String 5.Number 6.Symbo ...
- jQuery框架 的四个入口函数
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...
- java代码块牛刀小试
牛刀小试1. 试一把静态代码块.实例化代码块和构造函数的执行顺序 public class People { public static int num = 0;//静态变量初始化 String na ...
- java小数保留位数四舍五入
方法一:四舍五入 double f = 111231.5585; BigDecimal b = new BigDecimal(f); double f1 = b.setScale(2, Roundin ...