1 from PIL import Image 2 import numpy as np 3 4 a = np.asarray(Image.open('D:\\python_common_exercise\\exercise\\taylor.jpg').convert('L')).astype('float') 5 6 depth = 10. #(0-100) 7 grad = np.gradient(a) #取图像灰度的梯度值 8 grad_x, grad_y = grad #分别取横纵图像的梯度值 9 grad_x = grad_x*depth/100. 10 grad_y = grad_y*depth/100. 11 A = np.sqrt(grad_x**2 + grad_y**2 + 1.) 12 uni_x = grad_x/A 13 uni_y = grad_y/A 14 uni_z = 1./A 15 16 vec_el = np.pi/2.2 # 光源的俯视角度,弧度值 17 vec_az = np.pi/4. # 光源的方位角度,弧度值 18 dx = np.cos(vec_el)*np.cos(vec_az) #光源对x 轴的影响 19 dy = np.cos(vec_el)*np.sin(vec_az) #光源对y 轴的影响 20 dz = np.sin(vec_el) #光源对z 轴的影响 21 22 b = 255*(dx*uni_x + dy*uni_y + dz*uni_z) #光源归一化 23 b = b.clip(0,255) 24 25 im = Image.fromarray(b.astype('uint8')) #重构图像 26 im.save('D:\\python_common_exercise\\exercise\\taylor_2.jpg')
2. numpy 和 matplotlib 笔记
(1) numpy
Numpy函数库中存在两种不同的数据类型(矩阵matrix和数组array),都可以用于处理行列表示的数字元素,虽然他们看起来很相似,但是在这两个数据类型上执行相同的数学运算可能得到不同的结果,其中Numpy函数库中的matrix与MATLAB中matrices等价。
直接看一个例子:
1 # 生成数据 , 保存数据 , 读取保存数据 2 import numpy as np 3 x = np.arange(10) 4 print(x) 5 6 np.save('save_x', x) 7 np.load('save_x.npy')
1 # 数据形式 2 import numpy as np 3 a = np.mat('1,3;5,7') 4 b = np.mat([[1,2],[3,4]]) 5 print(a) 6 print(b) 7 print(type(a)) 8 print(type(b)) 9 10 c = np.array([[1,3],[4,5]]) 11 print(c) 12 print(type(c))
输出:
[[1 3]
[5 7]]
[[1 2]
[3 4]]
<class 'numpy.matrix'>
<class 'numpy.matrix'>
[[1 3]
[4 5]]
<class 'numpy.ndarray'>
1 # 保存数据 2 import numpy as np 3 x = np.arange(10) 4 print(x) 5 np.save('save_x', x) 6 7 #读取数据 8 np.load('save_x.npy')
(2)matplotlib
简单画图
import matplotlib.pyplot as plt x = [0,1,2,3] y = [0,1,2,3] plt.plot(x, y) plt.show()
改变颜色和线条形式
import matplotlib.pyplot as plt x = [0,1,2,3] y = [0,1,2,3] plt.plot(x, y,'r--') plt.show()
画多个函数图像
import matplotlib.pyplot as plt x1 = [0,1,2,3] y1 = [0,1,2,3] x2 = [2,4,6,8] y2 = [4,8,12,16] plt.plot(x1, y1,'r-',x2,y2,'k--') plt.show()
import matplotlib.pyplot as plt import numpy as np x = np.linspace(-1,1,50) # linspace 是划分多少等分 y = x**2 + 3*x + 2 plt.plot(x, y) plt.show()
成绩雷达图
#e19.1DrawDotaRadar.py import numpy as np import matplotlib.pyplot as plt import matplotlib matplotlib.rcParams['font.family']='SimHei' matplotlib.rcParams['font.sans-serif']=['SimHei'] labels=np.array(['综合','第一周','第二周','第三周','第四周','第五周','第六周','第七周']) nAttr=8 Python=np.array([88.7,85,90,95,93,96,100,98]) angles=np.linspace(0,2*np.pi,nAttr,endpoint=False) Python=np.concatenate((Python,[Python[0]])) angles=np.concatenate((angles,[angles[0]])) fig=plt.figure(facecolor="white") plt.subplot(111,polar=True) plt.plot(angles,Python,'bo-',color='g',linewidth=2) plt.fill(angles,Python,facecolor='g',alpha=0.2) plt.thetagrids(angles*180/np.pi,labels) plt.figtext(0.52,0.95,'python成绩分析图',ha='center') plt.grid(True) plt.savefig('dota_radar.JPG') plt.show()