91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Python編程如何利用Numpy和PIL庫將圖片轉化為手繪

發布時間:2021-09-26 18:11:45 來源:億速云 閱讀:180 作者:小新 欄目:開發技術

小編給大家分享一下Python編程如何利用Numpy和PIL庫將圖片轉化為手繪,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!

主要采用的技術點

Python + Numpy + PIL

在正文代碼開始前,大家先看看最初原圖和轉換手繪風圖片前后對比。

Python編程如何利用Numpy和PIL庫將圖片轉化為手繪

當然了,我先查了手繪的三個基本特點:

  • 圖片可單通道灰度圖

  • 邊緣線條較重可當成黑色,相同或相近像素值趨向白色

  • 光源效果下,灰度變化類似于人類視覺的遠近

下面開始介紹,手繪照實現步驟:

讀取圖片,轉化為數組

因為要對圖像的像素計算,可以先把圖片先轉化為數組。代碼如下:

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.

計算 x,y,z 軸梯度值,歸一化

照片對邊緣區域更側重,計算梯度是定位圖片邊緣部分最有效方式,用灰度變化來模擬圖片遠近效果,depth 表示預設深度,z 軸默認梯度為 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.

對梯度值進行歸一化操作

A = np.sqrt(grad_x ** 2 + grad_y ** 2 + 1.)
uni_x = grad_x / A
uni_y = grad_y / A
uni_z = 1. / A

加入光源效果

根據光源不同的入射角度,對x,y,z 各軸上的梯度值有不同程度的影響,添加一個模擬光源,放置在斜上方,與 x , y 分別形成兩個夾角,最后用正弦余弦函數計算出新的像素值。

vec_el = np.pi / 2.2  # 光源的俯視角度,弧度值
vec_az = np.pi / 4.  # 光源的方位角度,弧度值
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)  # 光源歸一化,8 255
b = b.clip(0, 255)# 對像素值低于0,高于255部分做截斷處理

導出圖片,并保存

im.save("man_shouhui.jpg")

用 Python將一張圖片轉化為手繪風格,就這么輕松搞定了!

以上是“Python編程如何利用Numpy和PIL庫將圖片轉化為手繪”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

当雄县| 璧山县| 皋兰县| 孟村| 吕梁市| 达孜县| 三门县| 自治县| 淮阳县| 甘孜县| 弥渡县| 宜丰县| 璧山县| 田阳县| 章丘市| 寿阳县| 金川县| 剑阁县| 阆中市| 雷山县| 克拉玛依市| 松潘县| 南京市| 崇义县| 胶州市| 西丰县| 罗山县| 荔波县| 永嘉县| 双辽市| 甘德县| 龙口市| 宝坻区| 大连市| 韶关市| 泰兴市| 会同县| 万全县| 青铜峡市| 延边| 扎兰屯市|