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.

  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)))

输出如下:

原文地址:https://www.cnblogs.com/sdu20112013/p/11216322.html

时间: 2024-10-03 23:04:14

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

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

原文:减少HTTP请求之合并图片详解(大型网站优化技术) 一.相关知识讲解 看过雅虎的前端优化35条建议,都知道优化前端是有多么重要.页面的加载速度直接影响到用户的体验.80%的终端用户响应时间都花在了前端上,其中大部分时间都在下载页面上的各种组件:图片,样式表,脚本,Flash等等. 减少组件数必然能够减少页面提交的HTTP请求数.这是让页面更快的关键.减少页面组件数的一种方式是简化页面设计.但有没有一种方法可以在构建复杂的页面同时加快响应时间呢?嗯,确实有鱼和熊掌兼得的办法. 这里我们就拿雅

numpy模块(详解)

重点 索引和切片 级联 聚合操作 统计操作 矩阵 什么是数据分析 是把隐藏在一些看似杂乱无章的数据背后的信息提炼出来,总结出所研究对象的内在规律 数据分析是用适当的方法对收集来的大量数据进行分析,帮助人们做出判断,以便采取适当的行动 商品采购量的多少 总部向各个地区代理的发货量 为什么学习数据分析 有岗位的需求 是Python数据科学的基础 是机器学习课程的基础 数据分析实现流程 提出问题 准备数据 分析数据 获得结论 成果可视化 数据分析三剑客 numpy pandas matplotlib

Android开发之图片详解(4)

接上一篇. 主要研究下bitmap和drawable的使用,以及两者的区别. 先看测试代码: package com.example.imagetext; import java.util.ArrayList; import java.util.List; import com.example.imagetext.R.drawable; import android.annotation.SuppressLint; import android.app.Activity; import andr

numpy.linspace使用详解

numpy.linspace(start, stop, num=50, endpoint=True, retstep=False, dtype=None) 在指定的间隔内返回均匀间隔的数字. 返回num均匀分布的样本,在[start, stop]. 这个区间的端点可以任意的被排除在外. Parameters(参数): start : scalar(标量) The starting value of the sequence(序列的起始点). stop : scalar 序列的结束点,除非endp

webp图片详解

WebP(发音 weppy),是一种支持有损压缩和无损压缩的图片文件格式,派生自图像编码格式 VP8.根据 Google 的测试,无损压缩后的 WebP 比 PNG 文件少了 45% 的文件大小,即使这些 PNG 文件经过其他压缩工具压缩之后,WebP 还是可以减少 28% 的文件大小. 2010 年发布的 WebP 已经不算是新鲜事物了,在 Google 的明星产品如 Youtube.Gmail.Google Play 中都可以看到 WebP 的身影,而 Chrome 网上商店甚至已完全使用了

Android开发之图片详解(3)

在Android中,Bitmap普遍是造成OOM的罪魁祸首,而且普遍都认为bitmap所占用的内存远大于Drawable,而且网上也提供了很多内存回收的方法以及建议,比如在activity销毁后主动去调用bitmap.recyle()方法等,那么到底是不是真的呢?我专门针对bitmap和drawble做了以下测试: 为了方便测出OOM,我专门将一张比较大的图片1270*1920放在了mdpi的文件夹下,而我的测试机是320dpi的,那么根据我上篇文章所讲到的,如果通过资源去加载bitmap,那么

numpy.where() 用法详解

numpy.where (condition[, x, y]) numpy.where() 有两种用法: 1. np.where(condition, x, y) 满足条件(condition),输出x,不满足输出y. 如果是一维数组,相当于[xv if c else yv for (c,xv,yv) in zip(condition,x,y)] >>> aa = np.arange(10) >>> np.where(aa,1,-1) array([-1, 1, 1,

内置函数图片详解

原文地址:https://www.cnblogs.com/20181013python/p/10015017.html

Android:ViewPager扩展详解——带有导航的ViewPagerIndicator(附带图片缓存,异步加载图片)

大家都用过viewpager了, github上有对viewpager进行扩展,导航风格更加丰富,这个开源项目是ViewPagerIndicator,很好用,但是例子比较简单,实际用起来要进行很多扩展,比如在fragment里进行图片缓存和图片异步加载. 下面是ViewPagerIndicator源码运行后的效果,大家也都看过了,我多此一举截几张图: 下载源码请点击这里 ===========================================华丽的分割线==============