1. 程式人生 > >python科學計算庫和繪圖庫的結合(原創)

python科學計算庫和繪圖庫的結合(原創)

pri ast 保存 灰度 size object 科學 圖像 pil

# 導入繪圖庫 from PIL import Image #導入科學計算庫 import numpy as np

#封裝一個圖像處理工具類 class TestNumpy(object):
def photo2paint(self,img_url): #讀取圖片,asarray()轉矩陣 convert(‘L‘)轉變成像素化 astype()轉元素類型 my_photo = np.asarray(Image.open(img_url).convert(‘L‘)).astype(‘float‘) print(my_photo) print(my_photo.dtype) print(my_photo.shape) print(my_photo.size) print(‘矩陣是 {} 維度‘.format(my_photo.ndim)) print(‘元素 {} 字節‘.format(my_photo.itemsize))
#設置灰度閾值 範圍是(0-100) depth = 10
#將灰度系數映射到numpy grad = np.gradient(my_photo)
#獲取坐標 grad_x,grad_y = grad
#分別處理,淡化灰度 grad_x = grad_x * depth / 300 grad_y = grad_y * depth / 300
#設置阿爾法值 #設置坐標範圍 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
#設置x軸和y軸 dx = np.cos(vec_el) * np.cos(vec_az) #余玄 dy = np.cos(vec_el) * np.sin(vec_az)
#設置z軸 dz = np.sin(vec_el)
#設置byte值 b = 255 * (dx*uni_x+dy*uni_y+dz*uni_z) #光源歸一化 b = b.clip(0,255)
#聲明圖像類對象 im = Image.fromarray(b.astype(‘uint8‘)) #保存圖像 im.save(‘./test_new.jpg‘)

if __name__ == "__main__": tn = TestNumpy() tn.photo2paint(‘./test_numpy.jpg‘)

python科學計算庫和繪圖庫的結合(原創)