概述
如何使用python的numpy和python库中的PIL中的Image类进行图像的手绘处理
1. 手绘的情况要考虑原图的明暗程度以及光照的影响。
2. 图像的明暗程度的变化可以用grad u(i,j,k)梯度进行表示,直接调用numpy中的gradient(a)即可对ndarray数组进行梯度化
3.通过降维度函数convert('L'),将图像数组降为二维,进行灰度化
4.将光源效果,与深度depath对梯度的影响进行叠加
5.将处理后的数组通过Image.fromarray函数进行生成
im =np.array(Image.open('D:/dmeo.jpg').convert("L")).astype('float')
depath = 5 #对图像进行灰度降解的程度
grad = np.gradient(im) #计算图像对应的二维矩阵中的各个元素对应的梯度值,根据变化率来对各个像素点进行单位归一化
grad_x,grad_y = grad # x,y轴上面的梯度值,主要用来表示灰度的变化率
grad_x = grad_x*depath/100 #根据深度调整X,Y上的梯度值,进而影响灰度
grad_y = grad_y*depath/100
#求出立体坐标系下的梯度的模长
A = np.sqrt(grad_x**2+grad_y**2+1)#数学的模长计算公式
#进行单位化处理
uni_x = grad_x/A
uni_y = grad_y/A
uni_z = 1/A
#模拟光源对立体图像的影响
vec_el = np.pi/2.2
vec_ez = np.pi/4.
#下面分别是对X,Y,Z轴上面的影响
dx = np.cos(vec_el)*np.cos(vec_ez)
dy = np.cos(vec_el)*np.sin(vec_ez)
dz = np.sin(vec_el)
#将虚拟深度都灰度的影响以及光暗程度对灰度的影响叠加起来,并进行归一化
c = 255*(uni_x*dx+uni_y*dy+uni_z*dz)
#为了防止越界,进行区间裁剪
c = c.clip(0,255)
d = Image.fromarray(c.astype('uint8'))
d.save('D:/hello.png')
最后
以上就是真实饼干为你收集整理的如何通过PYthon进行图像的暗化处理的全部内容,希望文章能够帮你解决如何通过PYthon进行图像的暗化处理所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复