电脑
python3.6
加载3个模块:import numpy as npimport cv2,mathmath用来调用数学函数。
给出一个列表:u = []for i in range(10): u.append(i)print(u)这个u是一个一维列表。
看看2*u能够得到什么。print(u*2)仅仅是把列表u打印了两次。
把u转化为矩阵mu:mu = np.array(u)矩阵mu里面的元素之间没有逗号。
对比一下u*2与mu*2的不同。mu*2不是把mu打印两次,而是把mu里面的每一个元素都乘以2。
给出一个二维列表: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循环,给出二维列表。
如果改一下: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没有矩阵的结构。
如果把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)是不是乱套了?
要想获得二维矩阵,但是又不那么单调,需要怎么办呢?很简单,把二级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)成功!
这样,我们可以构造像素矩阵:cv2.imshow('a',mu)cv2.waitKey(0)把矩阵mu转化为像素图,得到一个100*100的黑色图片。
如果希望获得彩色图片,可以考虑三通道图片:v.append([j**2,2*j,j**3])
使用三角函数:v.append([255*math.sin(j),255*math.cos(j),255*math.sin(j**2)])得到条纹图。
大图,365*500。
结合本文的方法,可以用python对图片进行色彩分离。