最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python實現(xiàn)圖像手繪效果的方法詳解

 更新時間:2022年09月21日 09:45:01   作者:夏天是冰紅茶  
這篇文章主要為大家詳細介紹了如何利用Python語言實現(xiàn)圖像手繪效果,文中的示例代碼講解詳細,具有一定的借鑒價值,需要的可以參考一下

圖像的數(shù)組表示

圖像的RGB色彩模式

圖像一般使用RGB色彩模式,即每個像素點的顏色由紅(R)、綠(G)、藍(B)組成。

RGB三個顏色通道的變化和疊加得到各種顏色,其中

  • R 紅色,取值范圍,0‐255
  •  G 綠色,取值范圍,0‐255
  •  B 藍色,取值范圍,0‐255

RGB形成的顏色包括了人類視力所能感知的所有顏色。

PIL庫

PIL——Python Image Library

PIL庫是一個具有強大圖像處理能力的第三方庫 在命令行下的安裝方法:

#安裝
pip install pillow
#引入包
from PIL import Image

Image是PIL庫中代表一個圖像的類(對象)。

圖像組成

圖像是一個由像素組成的二維矩陣,每個元素是一個RGB值,它是(R,G,B)。圖像是一個三維數(shù)組,維度分別是高度、寬度和像素RGB值。

from PIL import Image
import numpy as np
 
im=np.array(Image.open("beijing.jpg"))
print(im.shape,im.dtype)

它的輸出是

(669, 1012, 3) uint8

圖像的變換

我們將會完成在讀入圖像后,獲得像素RGB值,修改后保存為新的文件。

讓我們先來看看對每個像素形成互補的圖像:

from PIL import Image
import numpy as np
 
a=np.array(Image.open("beijing.jpg"))
b=[255,255,255]-a
im=Image.fromarray(b.astype("uint8"))
im.save('./new.jpg')

再來看看圖像進行灰度處理后,剩下兩個通道。

from PIL import Image
import numpy as np
 
a=np.array(Image.open("beijing.jpg").convert("L"))
b=255-a
im=Image.fromarray(b.astype("uint8"))
im.save('./new.jpg')

灰度圖像后的區(qū)間變換

from PIL import Image
import numpy as np
 
a=np.array(Image.open("beijing.jpg").convert("L"))
b=(100/255)*a+150
im=Image.fromarray(b.astype("uint8"))
im.save('./new.jpg')

灰度圖像后的像素平方

from PIL import Image
import numpy as np
 
a=np.array(Image.open("beijing.jpg").convert("L"))
b=255*(a/255)**2
im=Image.fromarray(b.astype("uint8"))
im.save('./new.jpg')

那大家也看到了,我們只需要對其b進行修改即可。

圖像的手繪效果

手繪效果展示

 手繪效果的幾個特征:

  • 黑白灰色
  • 邊界線條較重
  • 相同或相近色彩趨于白色
  • 略有光源效果

代碼展示與講解

from PIL import Image
import numpy as np
 
a = np.asarray(Image.open('./beijing.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./A
 
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) 	#光源歸一化
b = b.clip(0,255)
 
im = Image.fromarray(b.astype('uint8')) 	#重構(gòu)圖像
im.save('./beijingHD.jpg')
 

梯度的重構(gòu)

利用像素之間的梯度值和虛擬深度值對圖像進行重構(gòu),根據(jù)灰度變化來模擬人類視覺的遠近程度。

depth = 10.					
grad = np.gradient(a)				
grad_x, grad_y = grad 				
grad_x = grad_x*depth/100.
grad_y = grad_y*depth/100.

depth預設(shè)深度值為10,其取值范圍0‐100,再提取x和y方向的梯度值,根據(jù)深度調(diào)整x和y方向的梯度值。

光源效果

根據(jù)灰度變化來模擬人類視覺的遠近程度。

  • 設(shè)計一個位于圖像斜上方的虛擬光源
  • 光源相對于圖像的俯視角為Elevation,方位角為Azimuth
  • 建立光源對個點梯度值的影響函數(shù)
  • 運算出各點的新像素值
vec_el = np.pi/2.2 				
vec_az = np.pi/4. 				
dx = np.cos(vec_el)*np.cos(vec_az) 	
dy = np.cos(vec_el)*np.sin(vec_az) 	
dz = np.sin(vec_el) 			

np.cos(vec_el)為單位光線在地平面上的投影長度,dx, dy, dz是光源對x/y/z三方向的影響程度。

梯度歸一化

A = np.sqrt(grad_x**2 + grad_y**2 + 1.)
uni_x = grad_x/A
uni_y = grad_y/A
uni_z = 1./A
b = 255*(dx*uni_x + dy*uni_y + dz*uni_z) 

A是構(gòu)造x和y軸梯度的三維歸一化單位坐標系,然后梯度與光源相互作用,將梯度轉(zhuǎn)化為灰度

圖像生成 

b = b.clip(0,255)
 
im = Image.fromarray(b.astype('uint8')) 	#重構(gòu)圖像
im.save('./beijingHD.jpg')

在這里,為避免數(shù)據(jù)越界,將生成的灰度值裁剪至0‐255區(qū)間

到此這篇關(guān)于Python實現(xiàn)圖像手繪效果的方法詳解的文章就介紹到這了,更多相關(guān)Python圖像手繪內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • python距離測量的方法

    python距離測量的方法

    這篇文章主要為大家詳細介紹了python距離測量的方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-03-03
  • Python與AI分析時間序列數(shù)據(jù)

    Python與AI分析時間序列數(shù)據(jù)

    預測給定輸入序列中的下一個是機器學習中的另一個重要概念.本章為您提供有關(guān)分析時間序列數(shù)據(jù)的詳細說明,有需要的朋友可以借鑒參考下,希望能夠有所幫助
    2022-05-05
  • 基于Python編寫PDF轉(zhuǎn)EPUB以及MOBI工具

    基于Python編寫PDF轉(zhuǎn)EPUB以及MOBI工具

    當我們需要在電子閱讀器上閱讀這些文檔時,轉(zhuǎn)換為EPUB或MOBI格式會提供更好的閱讀體驗,所以本文將使用Python編寫一個PDF轉(zhuǎn)EPUB以及MOBI工具,需要的可以參考下
    2025-03-03
  • python清空命令行方式

    python清空命令行方式

    今天小編就為大家分享一篇python清空命令行方式,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-01-01
  • 詳解python異步編程之a(chǎn)syncio(百萬并發(fā))

    詳解python異步編程之a(chǎn)syncio(百萬并發(fā))

    這篇文章主要介紹了詳解python異步編程之a(chǎn)syncio(百萬并發(fā)),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-07-07
  • Python編程編寫完善的命令行工具

    Python編程編寫完善的命令行工具

    提到編寫命令行工具,你可能會想到用 sys.argv 或者標準庫 argparse,沒錯,這兩個很常用,不過情況復雜時沒有那么方便和高效,因此今天分享兩個工具,讓你編寫命令行工具不費吹灰之力
    2021-09-09
  • Python3實現(xiàn)發(fā)送QQ郵件功能(html)

    Python3實現(xiàn)發(fā)送QQ郵件功能(html)

    這篇文章主要為大家詳細介紹了Python3實現(xiàn)發(fā)送QQ郵件功能,html格式的qq郵件,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-12-12
  • python如何利用joblib保存訓練模型

    python如何利用joblib保存訓練模型

    這篇文章主要介紹了python如何利用joblib保存訓練模型問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-06-06
  • python基礎(chǔ)教程之序列詳解

    python基礎(chǔ)教程之序列詳解

    這篇文章主要介紹了python基礎(chǔ)教程之序列詳解,本文的序列包含元組(tuple)、列表(list)等數(shù)據(jù)類型,需要的朋友可以參考下
    2014-08-08
  • python實現(xiàn)DES加密解密方法實例詳解

    python實現(xiàn)DES加密解密方法實例詳解

    這篇文章主要介紹了python實現(xiàn)DES加密解密方法,以實例形式較為詳細的分析了基于Python實現(xiàn)的DES加密與解密技巧,需要的朋友可以參考下
    2015-06-06

最新評論

沾益县| 威远县| 开远市| 浮梁县| 乃东县| 修文县| 砚山县| 高陵县| 宜兴市| 云和县| 太仆寺旗| 治县。| 鹿邑县| 天柱县| 措勤县| 红安县| 平南县| 雅安市| 英山县| 漠河县| 景东| 阜平县| 丰顺县| 瓮安县| 英山县| 和田县| 广德县| 房山区| 永安市| 大邑县| 红桥区| 明光市| 兴义市| 元氏县| 石台县| 砚山县| 寻甸| 云龙县| 徐水县| 临漳县| 顺平县|