Python編程利用Numpy和PIL庫(kù)將圖片轉(zhuǎn)化為手繪
主要采用的技術(shù)點(diǎn)
Python + Numpy + PIL
在正文代碼開(kāi)始前,大家先看看最初原圖和轉(zhuǎn)換手繪風(fēng)圖片前后對(duì)比。

當(dāng)然了,我先查了手繪的三個(gè)基本特點(diǎn):
- 圖片可單通道灰度圖
- 邊緣線條較重可當(dāng)成黑色,相同或相近像素值趨向白色
- 光源效果下,灰度變化類(lèi)似于人類(lèi)視覺(jué)的遠(yuǎn)近
下面開(kāi)始介紹,手繪照實(shí)現(xiàn)步驟:
讀取圖片,轉(zhuǎn)化為數(shù)組
因?yàn)橐獙?duì)圖像的像素計(jì)算,可以先把圖片先轉(zhuǎn)化為數(shù)組。代碼如下:
depth = 10. # (0-100) grad = np.gradient(a) # 取圖像灰度的梯度值 grad_x, grad_y = grad # 分別取橫縱圖像梯度值 grad_x = grad_x * depth / 100. grad_y = grad_y * depth / 100.
計(jì)算 x,y,z 軸梯度值,歸一化
照片對(duì)邊緣區(qū)域更側(cè)重,計(jì)算梯度是定位圖片邊緣部分最有效方式,用灰度變化來(lái)模擬圖片遠(yuǎn)近效果,depth 表示預(yù)設(shè)深度,z 軸默認(rèn)梯度為 1。
depth = 10. # (0-100) grad = np.gradient(a) # 取圖像灰度的梯度值 grad_x, grad_y = grad # 分別取橫縱圖像梯度值 grad_x = grad_x * depth / 100. grad_y = grad_y * depth / 100.
對(duì)梯度值進(jìn)行歸一化操作
A = np.sqrt(grad_x ** 2 + grad_y ** 2 + 1.) uni_x = grad_x / A uni_y = grad_y / A uni_z = 1. / A
加入光源效果
根據(jù)光源不同的入射角度,對(duì)x,y,z 各軸上的梯度值有不同程度的影響,添加一個(gè)模擬光源,放置在斜上方,與 x , y 分別形成兩個(gè)夾角,最后用正弦余弦函數(shù)計(jì)算出新的像素值。
vec_el = np.pi / 2.2 # 光源的俯視角度,弧度值 vec_az = np.pi / 4. # 光源的方位角度,弧度值 dx = np.cos(vec_el) * np.cos(vec_az) # 光源對(duì) x軸的影響 dy = np.cos(vec_el) * np.sin(vec_az) # 光源對(duì) y軸的影響 dz = np.sin(vec_el) # 光源對(duì)z 軸的影響 b = 255 * (dx * uni_x + dy * uni_y + dz * uni_z) # 光源歸一化,8 255 b = b.clip(0, 255)# 對(duì)像素值低于0,高于255部分做截?cái)嗵幚?
導(dǎo)出圖片,并保存
im.save("man_shouhui.jpg")
用 Python將一張圖片轉(zhuǎn)化為手繪風(fēng)格,就這么輕松搞定了!
以上就是Python編程利用Numpy和PIL庫(kù)將一張圖片轉(zhuǎn)化為手繪風(fēng)格的詳細(xì)內(nèi)容,更多關(guān)于python編程N(yùn)umpy和PIL庫(kù)的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
python回溯算法實(shí)現(xiàn)全排列小練習(xí)分享
這篇文章主要給大家分享的是python回溯算法實(shí)現(xiàn)全排列小練習(xí),文章根據(jù)例子:輸入列表L(不含重復(fù)元素),輸出L的全排列展開(kāi)學(xué)習(xí),需要的小伙伴可以參考一下2022-02-02
Python腳本實(shí)現(xiàn)DNSPod DNS動(dòng)態(tài)解析域名
這篇文章主要介紹了Python腳本實(shí)現(xiàn)DNSPod DNS動(dòng)態(tài)解析域名,本文直接給出實(shí)現(xiàn)代碼,需要的朋友可以參考下2015-02-02
使用python實(shí)現(xiàn)多維數(shù)據(jù)降維操作
今天小編就為大家分享一篇使用python實(shí)現(xiàn)多維數(shù)據(jù)降維操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-02-02
使用Python將TS文件轉(zhuǎn)換為MP4的操作方法
在多媒體處理中,將不同格式的視頻文件進(jìn)行轉(zhuǎn)換是一項(xiàng)常見(jiàn)的任務(wù),TS(Transport Stream)是一種常用的流媒體格式,而MP4則是更為廣泛使用的通用視頻格式,本文將介紹如何使用Python和FFmpeg工具將TS文件轉(zhuǎn)換為MP4文件,需要的朋友可以參考下2025-04-04
python使用pyinstaller將代碼打包為exe程序
這篇文章主要為大家詳細(xì)介紹了python如何使用pyinstaller將代碼打包為exe程序,文中的示例代碼講解詳細(xì),有需要的小伙伴可以參考一下2024-11-11
Python通過(guò)DOM和SAX方式解析XML的應(yīng)用實(shí)例分享
這篇文章主要介紹了Python通過(guò)DOM和SAX方式解析XML的應(yīng)用實(shí)例分享,針對(duì)這兩種解析方式Python都有相關(guān)的模塊可供使用,需要的朋友可以參考下2015-11-11

