numpy表示图片详解
2024-09-01 00:29:35
我自己的一个体会,在学习机器学习和深度学习的过程里,包括阅读模型源码的过程里,一个比较大的阻碍是对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)))
输出如下:
最新文章
- JAVA源码分析-HashMap源码分析(一)
- 定制Eclipse IDE之功能篇(一)
- 使用 data-* 属性来嵌入自定义数据
- BRIEF算法
- [转]30分钟学会反向Ajax
- 使用zookeeper实现分布式master选举(c 接口版本)
- Play Framework 发现并没有热启动的特殊情况
- OpenGL4-绘制旋转的立方体
- php异步加载、多线程fsockopen()、fputs()
- python 错误、调试和测试
- Gems
- [转] GPS坐标转换经纬度及换算方法
- Django REST framework使用ViewSets的自定义路由实现过程
- 想做iPhoneX抢购活动?压测大师先教你优化网站后台
- 解决Flink输出日志中时间比当前时间晚8个小时的问题
- Asp.Net Core 轻松学-HttpClient的演进和避坑
- 我常用的sublime快捷键整理
- 聊聊基准测试的MVP方案
- mongoDB工具类以及测试类【java】
- Redis缓存用起来
热门文章
- duilib禁止標題欄雙擊放大窗口
- 改善C#程序的建议1:非用ICloneable不可的理由
- Qt 5.6.0 动态编译(VS2013 x86 target xp openssl icu webkit)
- ASP.NET Web API 直到我膝盖中了一箭【1】基础篇
- CentOS7.x mini安装OVS
- spring boot 2.x 系列 —— spring boot 整合 druid+mybatis
- Mui a 链接失效的解决办法
- 系统学习 Java IO (三)----文件类 File
- Java:HashMap原理与设计缘由
- Python静态方法,其实暗藏玄机