python 圖像手繪效果展示

效果

在這裏插入圖片描述
在這裏插入圖片描述

代碼

# -*- coding: utf-8 -*-
"""
Created on Fri Jan 31 20:52:11 2020
@author: JZJ
"""

from PIL import Image
import numpy as np
a = np.asarray(Image.open('C:/Camera Roll/ex.jpg').convert('L')).astype('float')
# 利用像素之間的梯度值和虛擬深度值對圖像進行重構,根據灰度變化來模擬人類視覺的遠近程度
depth = 10. # 0-100   預設深度爲10,取值範圍0-100
grad = np.gradient(a) #取圖像灰度的梯度值
grad_x, grad_y = grad # 提取x和y方向的梯度值
grad_x = grad_x*depth/100. 
grad_y = grad_y*depth/100. # 根據深度調整x和y方向的梯度值
A = np.sqrt(grad_x**2 + grad_y**2 + 1.) # 構造x和y軸梯度的三維歸一化單位座標系
uni_x = grad_x/A
uni_y = grad_y/A
uni_z = 1./A

# np.cos(vec_el)爲單位光線在地平面上的投影長度
vec_el = np.pi/2.2 # 光源的俯視角度,弧度值
vec_az = np.pi/4.  #光源的方位角度,弧度值
# dx, dy, dz是光源對x/y/z三方向的影響程度
dx = np.cos(vec_el)*np.cos(vec_az) # 光源對X軸的影響 
dy = np.cos(vec_el)*np.sin(vec_az) # 光源對y軸的影響
dz = np.sin(vec_el)                # 光源對z軸的影響

b = 255*(dx*uni_x + dy*uni_y + dz*uni_z) #梯度與光源相互作用,將梯度轉化爲灰度
b = b.clip(0,255) # 爲避免數據越界,將生成的灰度值裁剪至0‐255區間

im = Image.fromarray(b.astype('uint8')) #重構圖像
im.save("C:/Camera Roll/WUHANjmm_Draw.jpg")
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章