Python -- 图像的手绘风格
**
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)行程序的編寫了,下面展出代碼:
其中
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)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Linux的压缩指令zip,tar,gz
- 下一篇: 【Python】利用高斯朴素贝叶斯模型实