我自己的一个体会,在学习机器学习和深度学习的过程里,包括阅读模型源码的过程里,一个比较大的阻碍是对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. Ubuntu服务器搭建

    Ubuntu16 搭建Git 服务器 - 濮成林 - 博客园 https://www.cnblogs.com/charliePU/p/7528226.html Ubuntu 搭建 GitLab 笔记 ...

  2. shell条件测试结构

    条件测试结构 if/then结构用来判断命令列表的退出状态码是否为0(因为在UNIX惯例, 0表示"成功"), 如果成功的话, 那么就执行接下来的一个或多个命令. 有一个专有命令[ ...

  3. Java HashMap实现原理 源码剖析

    HashMap是基于哈希表的Map接口实现,提供了所有可选的映射操作,并允许使用null值和null建,不同步且不保证映射顺序.下面记录一下研究HashMap实现原理. HashMap内部存储 在Ha ...

  4. Qt使用com组件的一点小心得(使用Qt自带的工具dumpcpp生成.h和.cpp文件)

    这几天工作中要用到Qt调用com组件,主要用到的类型有dll和ocx,使用他们的方法很简单:1.将com组件注册到系统中.2.使用Qt自带的工具dumpcpp将com组件生成cpp和头文件.3.然后就 ...

  5. Compile for Windows on Linux(交叉编译,在Linux下编译Windows程序),以OpenSSL为例

    OpenSSL for Windows In earlier articles, we have looked at how to create a gcc build environment on ...

  6. Delphi各种从文件里读取内容的方法

    Hi I am having a problem running a function to read a text file the problem seems to be that my anti ...

  7. 利用apache搭建本地环境

    登陆http://httpd.apache.org/download.cgi到apache的官方下载页面. 选择一个版本,以最新版为例,点击Binaries.

  8. Codility--- TapeEquilibrium

    Task description A non-empty zero-indexed array A consisting of N integers is given. Array A represe ...

  9. vue+element——父级元素fixed,遮罩会在上方

    前言 这种场景还是蛮场景的 一个共用的head组件,组件里面通常是当前系统登录账号名 退出登录 修改密码这样的弹框 但是现在我又想head不跟着main内容上下滑动.所以用了fixed 定位. 问题来 ...

  10. 再说Java集合,subList之于ArrayList

    上一章说了很多ArrayList相关的内容,但还有一块儿内容没说到,那就是subList方法.先看一段代码 public static void testSubList() { List<Str ...