多语言展示
当前在线:1863今日阅读:103今日分享:49

构造像素矩阵——兼谈列表与矩阵的区别

在Mathematica里面,列表就是本质上的矩阵,而对应的MatrixForm却不是矩阵。而python里面,列表不是矩阵。本文要介绍一下python里面,列表转化为矩阵的方法,并以此来绘制像素图。
工具/原料
1

电脑

2

python3.6

方法/步骤
1

加载3个模块:import numpy as npimport cv2,mathmath用来调用数学函数。

2

给出一个列表:u = []for i in range(10):    u.append(i)print(u)这个u是一个一维列表。

3

看看2*u能够得到什么。print(u*2)仅仅是把列表u打印了两次。

4

把u转化为矩阵mu:mu = np.array(u)矩阵mu里面的元素之间没有逗号。

5

对比一下u*2与mu*2的不同。mu*2不是把mu打印两次,而是把mu里面的每一个元素都乘以2。

6

给出一个二维列表:u = []for i in range(10):    v=[]    for j in range(3):        v.append(j)    u.append(v)mu = np.array(u)print(u)print(mu)二级for循环,给出二维列表。

7

如果改一下:u = []for i in range(10):    v=[]    for j in range(3):        v.append(j)    u.append(i*v)mu = np.array(u)print(u)会有什么后果呢?u的子列表越来越长,这个u没有矩阵的结构。

8

如果把u硬性转化为矩阵,效果如下:u = []for i in range(10):    v=[]    for j in range(3):        v.append(j)    u.append(i*v)mu = np.array(u)print(mu)是不是乱套了?

9

要想获得二维矩阵,但是又不那么单调,需要怎么办呢?很简单,把二级for循环里面的v变成矩阵:u = []for i in range(10):    v=[]    for j in range(3):        v.append(j)    mv = np.array(v)    u.append(i*mv)mu = np.array(u)print(u)print(mu)成功!

10

这样,我们可以构造像素矩阵:cv2.imshow('a',mu)cv2.waitKey(0)把矩阵mu转化为像素图,得到一个100*100的黑色图片。

11

如果希望获得彩色图片,可以考虑三通道图片:v.append([j**2,2*j,j**3])

12

使用三角函数:v.append([255*math.sin(j),255*math.cos(j),255*math.sin(j**2)])得到条纹图。

13

大图,365*500。

注意事项

结合本文的方法,可以用python对图片进行色彩分离。

推荐信息