日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > python >内容正文

python

Python -- 图像的手绘风格

發(fā)布時間:2023/12/29 python 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Python -- 图像的手绘风格 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

**

Python – 圖像的手繪風(fēng)格

**
今天在mooc上了解到python可以做出手繪風(fēng)格的圖片,感覺很驚奇,很想知道python對于圖片是如何處理的,因此上網(wǎng)搜了一些博主的文章,總結(jié)了一下。

手繪效果圖有一下幾個特征:
1、圖像中僅有黑白灰色
2、邊界線條較重
3、相同或相近色彩趨于白色
4、略有光源效果

寫這個程序會用到兩個庫,一個是PIL(Python Imaging Library,),還有一個是numpy。PIL(Python Image Library)是python的第三方圖像處理庫,但是由于其強大的功能與眾多的使用人數(shù),幾乎已經(jīng)被認(rèn)為是python官方圖像處理庫了。PIL歷史悠久,原來是只支持python2.x的版本的,后來出現(xiàn)了移植到python3的庫pillow,pillow號稱是“friendly fork for PIL”,其功能和PIL差不多,但是支持python3。

那么我們?nèi)绾伟惭bPIL呢,(其實是安裝pillow啦,因為我的電腦是Windows10 版本,并且Python是3.7.2版本的)(PS:如果使用Pycharm的話直接在軟件內(nèi)下載即可)
首先>>>我們先打開命令行窗口輸入pip install pillow即可(PS:由于版本更新的問題,可能有些人需要更新一下pip,命令行輸入“python -m pip install --upgrade pip”即可)

同樣的>>>我們安裝numpy庫

然后>>>我們可以在python IDLE中測試一下是否安裝成功


安裝成功>>>我們可以繼續(xù)進(jìn)行程序的編寫了,下面展出代碼:

from PIL import Image import numpy as npa = np.asarray(Image.open("hit_example.jpg").convert('L')).astype('float')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./Avec_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) #光源歸一化 b = b.clip(0,255)im = Image.fromarray(b.astype('uint8')) #重構(gòu)圖像 im.save('hit_exampleHD.jpg') print("圖像手繪化已完成")

其中
np.asarray(Image.open(’./beijing.jpg’).convert(‘L’)).astype(‘float’)意思是將圖像以灰度圖的方式打開并將數(shù)據(jù)轉(zhuǎn)為float存入np中.

np.gradient(a) 是求a的梯度,返回的是二元信息,可分別賦值給grad_x,grad_y,將梯度按照深度等級計算并且歸一化處理。

建立光源效果

建立模型后可分析出np.cos(vec_el)為單位光線在地平面上的投影長度,dx,dy,dz是光源對x/y/z三方向的影響程度.

將梯度歸一化

構(gòu)造x和y軸梯度的三維歸一化單位坐標(biāo)系 A = np.sqrt(grad_x2 + grad_y2 + 1)

梯度和光源相互作用,將梯度轉(zhuǎn)化為灰度 b = 255*(dxuni_x + dyuni_y + dz*uni_z)

之前為了處理方便,我們梯度值調(diào)為0-1之間,梯度與光源相互作用后,還原為0-255,但仍然可能會有部分溢出,因此,為避免越界,將生成的灰度值剪裁至0-255區(qū)間b = b.clip(0,255)

最后就能得到手繪效果的圖啦~

最后貼圖:

總結(jié)

以上是生活随笔為你收集整理的Python -- 图像的手绘风格的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。