-
1 # HongyeLinux
-
2 # 無IT不科技
PIL(Python Image Library)是python的第三方影象處理庫,我們可以用它來做很多和影象處理相關的事情,主要包括了影象歸檔、影象展示和影象處理。
那我們該怎麼用它做影象處理相關的操作呢?
PIL包括了基礎的影象處理函式,包括對點的處理,使用眾多的卷積核(convolution kernels)做過濾(filter),還有顏色空間的轉換。PIL庫同樣支援影象的大小轉換,影象旋轉,以及任意的仿射變換。PIL還有一些直方圖的方法,允許你展示影象的一些統計特性。這個可以用來實現影象的自動對比度增強,還有全域性的統計分析等。我們只需要結合自己的業務需求,按需呼叫這些影象處理函式就可以實現影象處理了。
下面我們以影象增強為例,看一下如何使用。
先上程式碼:
>>> from PIL import ImageEnhance>>> brightness = ImageEnhanBce.Brightness(im)>>> im_brightness = brightness.enhance(1.5)>>> im_brightness.show()>>> im_contrast = ImageEnhance.Contrast(im)>>> im_contrast.enhance(1.5)<PIL.Image.Image image mode=RGB size=296x299 at 0x7F62AE271AC8>>>> im_contrast.enhance(1.5).show()ImageEnhance是PIL下的一個子類,主要用於影象增強,比如增加亮度(Brightness),增加對比度(Contrast)等。上面的程式碼將原來影象的亮度增加50%,將對比度也增加了50%。而其他影象處理方式也可以透過類似的方式呼叫其他類的方法來解決。例如使用ImageFilter尋找輪廓。
下圖是原圖片:
下圖是使用了ImageFilter.CONTOUR方法後的效果圖:
程式碼:
你學會了嗎?
-
3 # 極客京
大而全的PIL教程網上一搜就有,談點別的。
我用PIL寫過一個書法作品生成系統,用起來挺方面。
-
4 # 小小猿愛嘻嘻
PIL是python一個廣泛使用的影象處理庫,提供了大量函式和型別用於影象處理,這裡以黑白、流年、舊電影、反色4種影象特效為例,簡單介紹一下PIL庫是如何進行影象處理,感興趣的朋友可以自己嘗試一下:
黑白效果這是最簡單的一種圖片特效,基本思想先open開啟一個圖片,轉化為(R,G,B)三元組,然後將(R,G,B)三個通道數值都置為r*0.299+g*0.587+b*0.114即可,測試程式碼如下,非常簡單:
程式執行截圖如下,左邊為原始圖片,右邊為處理後的黑白圖,效果還不錯:
流年效果這也是一種比較常見的圖片特效方式,基本思想也非常簡單,先open讀取圖片內容,轉化為RGB三通道,然後再給R通道的值開平方,乘以一個引數(常數)即可,測試程式碼如下,也非常簡單:
程式執行截圖如下,左邊為原始圖,右邊為特效後的流年圖,差別不是很大:
舊電影效果這種特效方式也比較常見,基本思想也是先獲取RGB三通道,然後給3個通道分別乘以3個引數後求和,超過255的值置為255,測試程式碼如下:
程式執行截圖如下,左邊為原始圖片,右邊為特效後的舊電影圖,效果還不錯:
反色效果這種特效方式是最簡單的,基本思想先獲取圖片RGB通道值,然後用255減去每個通道原始值即可,測試程式碼如下,非常簡單:
程式執行截圖如下,左邊為原始圖,右邊為反色後的圖片,效果有些溜:
目前就分享這4種PIL圖片特效方式吧,最主要的還是對畫素點RGB值的處理,只要你有一定的影象處理基礎,會簡單的python程式設計,熟悉一下上面的示例,多除錯幾遍程式,很快就能掌握的,當然,PIL影象處理的功能不僅僅侷限於這些,像濾波等,也非常容易實現,網上也有相關資料和教程,介紹的非常詳細,感興趣的話,可以搜一下,希望以上分享的內容能對你有所幫助吧,也歡迎大家評論、留言進行補充。
回覆列表
Python裡的影象處理庫(PIL:Python Image Library),提供了了廣泛的檔案格式支援,強大的影象處理能力,主要包括影象儲存、影象顯示、格式轉換以及基本的影象處理操作等。簡單使用方法:
#!/usr/bin/env python
#encoding: utf-8
import Image
class myimg:
def __init__(self, open_file, save_file):
self.img = Image.open(open_file)
self.save_file = save_file
def Change_Size(self, percent=100, height=None, width=None):
"""""
percent:以百分比來決定大小
height, width:以指定的高、寬來決定大小
"""
if not (height and width):
width,height = self.img.size
new_img = self.img.resize((width*percent/100,height*percent/100),Image.BILINEAR)
new_img.save(self.save_file)
def Rotation(self, angle):
"""""
angle: 旋轉的度數
"""
rot_img = self.img.rotate(angle) #旋轉
rot_img.save(self.save_file)
def Save_as(self, filename):
"""""
filename: 另存為圖片格式,直接根據字尾名來
"""
self.img.save(filename)
def Draw_Something(self):
"""""
利用ImageDraw來畫圖形
"""
import ImageDraw
draw = ImageDraw.Draw(self.img)
width,height = self.img.size
draw.line(((0,0),(width-1,height-1)),fill=255) #畫直線
draw.line(((0,height-1),(width-1,0)),fill=255)
draw.arc((0,0,width-1,height-1),0,360,fill=255) #畫橢圓
self.img.save(self.save_file)
def Enhance_Something(self):
"""""
利用 ImageEnhance來增強圖片效果
"""
import ImageEnhance
brightness = ImageEnhance.Brightness(self.img)
bright_img = brightness.enhance(2.0) ##亮度增強
bright_img.save(self.save_file)
sharpness = ImageEnhance.Sharpness(self.img)
sharp_img = sharpness.enhance(7.0) #銳度增強
sharp_img.save(self.save_file)
contrast = ImageEnhance.Contrast(self.img) #對比度增強
contrast_img = contrast.enhance(2.0)
contrast_img.save(self.save_file)
if __name__ == "__main__":
file_name = r"D:\test.png"
save_file = r"D:\save.png"
saveas_file = r"D:\save_as.bmp"
oimg = myimg(file_name, save_file)
oimg.Change_Size(30)
oimg.Rotation(45)
oimg.Save_as(saveas_file)
oimg.Draw_Something()
oimg.Enhance_Something()