Python——圖像手繪效果


1、圖像的RGB色彩模式

PIL

PILPython Image Library

PIL庫是一個具有強大圖像處理能力的第三方庫

在命令行下的安裝方法: pip install pillow

from PIL import Image

ImagePIL庫中代表一個圖像的類(對象)

 

from PIL import Image

import numpy as np

im=np.array(Image.open(r"C:\Users\Administrator\Desktop\timg.jpg"))

print(im.shape,im.dtype)

可以看出圖像是一個三維數組,800行,1200列,每一個點分別是RGB三個值。

2、圖像的變換  

(1)

b=[255,255,255]-im

a=Image.fromarray(b.astype('uint8'))%生成新的圖像三維數組

a.save(r"C:\Users\Administrator\Desktop\timg_2.jpg")

 (2)

模式L”為灰色圖像,它的每個像素用8個bit表示,0表示黑,255表示白,其他數字表示不同的灰度。在PIL中,從模式“RGB”轉換為“L”模式是按照下面的公式轉換的:

L = R * 299/1000 + G * 587/1000+ B * 114/1000

下面我們將圖像轉換為“L”圖像。

a=np.array(Image.open(r"C:\Users\Administrator\Desktop\timg.jpg"))

b=np.array(Image.open(r"C:\Users\Administrator\Desktop\timg.jpg").convert('L'))

c=Image.fromarray(b.astype('uint8'))

c.save(r"C:\Users\Administrator\Desktop\timg_5.jpg")

 

RGB三個數變為了一個數。

(3)

a=np.array(Image.open(r"C:\Users\Administrator\Desktop\timg.jpg").convert('L'))%變為灰度值圖片

a
Out[12]: 
array([[104, 104, 104, ..., 145, 145, 145],
       [104, 104, 104, ..., 145, 145, 145],
       [104, 104, 104, ..., 145, 145, 145],
       ..., 
       [ 70,  78,  79, ...,  73,  65,  78],
       [ 72,  79,  78, ...,  76,  49,  83],
       [ 73,  71,  69, ..., 118,  76,  97]], dtype=uint8)

b=255-a

b
Out[14]: 
array([[151, 151, 151, ..., 110, 110, 110],
       [151, 151, 151, ..., 110, 110, 110],
       [151, 151, 151, ..., 110, 110, 110],
       ..., 
       [185, 177, 176, ..., 182, 190, 177],
       [183, 176, 177, ..., 179, 206, 172],
       [182, 184, 186, ..., 137, 179, 158]], dtype=uint8)

im=Image.fromarray(b.astype('uint8'))

im.save(r"C:\Users\Administrator\Desktop\timg_3.jpg")

(4)

d=255*(a/255)**2  %平方變換

im=Image.fromarray(d.astype('uint8'))

im.save(r"C:\Users\Administrator\Desktop\timg_4.jpg")

(5)

d=(100/255)*a+150%區間變換

im=Image.fromarray(d.astype('uint8'))

im.save(r"C:\Users\Administrator\Desktop\timg_4.jpg")  

 

2、圖像手繪效果分析

手繪效果的幾個特征:

黑白灰色

邊界線條較重

相同或相近色彩趨於白色

略有光源效果

 (1)梯度重構

利用像素之間的梯度值和虛擬深度值對圖像進行重構

(2)光源效果

根據灰度變化來模擬人類視覺的遠近程度

(3)

(4)

from PIL import Image
import numpy as np

a = np.asarray(Image.open(r"C:\Users\Administrator\Desktop\timg.jpg").convert('L')).astype('float')

depth = 10. 					
grad = np.gradient(a)			       #梯度值,	
grad_x, grad_y = grad 			
grad_x = grad_x*depth/100.       #列梯度值*0.1
grad_y = grad_y*depth/100.

A = np.sqrt(grad_x**2 + grad_y**2 + 1.)  #相當於grad_z=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) dy = np.cos(vec_el)*np.sin(vec_az) dz = np.sin(vec_el) #長度為1,投影x,y,z長度 b = 255*(dx*uni_x + dy*uni_y + dz*uni_z) b = b.clip(0,255) im = Image.fromarray(b.astype('uint8')) im.save(r"C:\Users\Administrator\Desktop\timg_6.jpg")

 

數據變化過程如下

目的其實是將數據兩級化,要么黑要么白,更好凸顯手繪的感覺

x,y梯度變化越大,,則z的梯度比例越小,此時求出的變化后的灰度值越小,顏色越黑。

相反,則灰度值越大,越白,將黑白分明就顯示出來了。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM