まず、元の画像を見てみましょう。
次に、レンダリングを見てみましょう。
分析を通じて、次の特性を簡単に見つけることができます。
主な色は黒、白、灰色です
より重い境界線
同じまたは類似の色は白になる傾向があります
わずかな光源効果
使用する必要のあるライブラリは次のとおりです。
numpy
PIL
コード:
importnumpyasnp
fromPILimportImage
baseImg=Image.open("./img/myimg2.jpg").convert("L")#手塗りしたい元の絵をここに置いてください
a=np.array(baseImg).astype("float")
depth=8.
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.sin(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)#制限
img=Image.fromarray(b.astype("uint8"))#再構成された画像
img.save("./toImg/myImage1.jpg")#画像を保存
拡張の例:
from PIL import Image
import numpy as np
# ファイルのインポートを容易にするために、相対パスを使用してファイルとプログラムを同じフォルダーに配置できます。
vec_el=np.pi/2.2
vec_az=np.pi/4.
depth=10.
im=Image.open("HIT2.jpg").convert('L')
a=np.asarray(im).astype('float')
grad=np.gradient(a)
grad_x,grad_y=grad
grad_x=grad_x*depth/100.
grad_y=grad_y*depth/100.
dx=np.cos(vec_el)*np.cos(vec_az)
dy=np.cos(vec_el)*np.sin(vec_az)
dz=np.sin(vec_el)
A=np.sqrt(grad_x**2+grad_y**2+1.)
uni_x=grad_x/A
uni_y=grad_y/A
uni_z=1./A
a2=255*(dx*uni_x+dy*uni_y+dz*uni_z)
a2=a2.clip(0,255)
im2=Image.fromarray(a2.astype('uint8'))
im2.save('hit2-SH.jpg')
これで、手描き効果のPython実装例の共有に関するこの記事は終わりです。手描き効果のPython実装の関連性については、ZaLou.Cnの以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後、ZaLouをさらにサポートしていただければ幸いです。 .Cn!
Recommended Posts