A. 怎樣安裝python的圖像處理庫pillow
找到easy_install.exe工具。在windows下安裝Python後,在其安裝路徑下的scripts文件中默認安裝好了easy_install工具。完整路徑如下例:D:\Python27\Scripts\easy_install.exe;其中為我python的安裝路徑,大家可以根據自己的安裝路徑更改。
使用easy_install.exe工具一鍵安裝pip.打開cmd,輸入安裝命令。操作命令如下圖所示:
pip安裝成功後,在cmd下執行pip,將會有如下提示。
再通過pip進行一鍵安裝Pillow。pip類似RedHat裡面的yum,安裝Python包非常方便。操作命令如下圖所示:
5
到這一步就安裝好了。馬上用起來吧,下圖是用這個庫將圖片轉換的字元畫。轉換後有點大,分割成兩張了。
B. python的pillow庫怎麼處理灰度圖像
Pillow是Python里的圖像處理庫(PIL:Python Image Library),提供了了廣泛的文件格式支持,強大的圖像處理能力,主要包括圖像儲存、圖像顯示、格式轉換以及基本的圖像處理操作等。
1)使用 Image 類
PIL最重要的類是 Image class, 你可以通過多種方法創建這個類的實例;你可以從文件載入圖像,或者處理其他圖像, 或者從 scratch 創建。
要從文件載入圖像,可以使用open( )函數,在Image模塊中:
>>> from PIL import Image
>>> im = Image.open("E:/photoshop/1.jpg")
載入成功後,將返回一個Image對象,可以通過使用示例屬性查看文件內容:
>>> print(im.format, im.size, im.mode)
('JPEG', (600, 351), 'RGB')
>>>
format 這個屬性標識了圖像來源。如果圖像不是從文件讀取它的值就是None。size屬性是一個二元tuple,包含width和height(寬度和高度,單位都是px)。 mode 屬性定義了圖像bands的數量和名稱,以及像素類型和深度。常見的modes 有 「L」 (luminance) 表示灰度圖像, 「RGB」 表示真彩色圖像, and 「CMYK」 表示出版圖像。
如果文件打開錯誤,返回 IOError 錯誤。
只要你有了 Image 類的實例,你就可以通過類的方法處理圖像。比如,下列方法可以顯示圖像:
im.show()
2)讀寫圖像
PIL 模塊支持大量圖片格式。使用在 Image 模塊的 open() 函數從磁碟讀取文件。你不需要知道文件格式就能打開它,這個庫能夠根據文件內容自動確定文件格式。要保存文件,使用 Image 類的 save() 方法。保存文件的時候文件名變得重要了。除非你指定格式,否則這個庫將會以文件名的擴展名作為格式保存。
載入文件,並轉化為png格式:
"Python Image Library Test"
from PIL import Image
import os
import sys
for infile in sys.argv[1:]:
f,e = os.path.splitext(infile)
outfile = f +".png"
if infile != outfile:
try:
Image.open(infile).save(outfile)
except IOError:
print("Cannot convert", infile)
save() 方法的第二個參數可以指定文件格式。
3)創建縮略圖
縮略圖是網路開發或圖像軟體預覽常用的一種基本技術,使用Python的Pillow圖像庫可以很方便的建立縮略圖,如下:
# create thumbnail
size = (128,128)
for infile in glob.glob("E:/photoshop/*.jpg"):
f, ext = os.path.splitext(infile)
img = Image.open(infile)
img.thumbnail(size,Image.ANTIALIAS)
img.save(f+".thumbnail","JPEG")
上段代碼對photoshop下的jpg圖像文件全部創建縮略圖,並保存,glob模塊是一種智能化的文件名匹配技術,在批圖像處理中經常會用到。
注意:Pillow庫不會直接解碼或者載入圖像柵格數據。當你打開一個文件,只會讀取文件頭信息用來確定格式,顏色模式,大小等等,文件的剩餘部分不會主動處理。這意味著打開一個圖像文件的操作十分快速,跟圖片大小和壓縮方式無關。
4)圖像的剪切、粘貼與合並操作
Image 類包含的方法允許你操作圖像部分選區,PIL.Image.Image.crop 方法獲取圖像的一個子矩形選區,如:
# crop, paste and merge
im = Image.open("E:/photoshop/lena.jpg")
box = (100,100,300,300)
region = im.crop(box)
矩形選區有一個4元元組定義,分別表示左、上、右、下的坐標。這個庫以左上角為坐標原點,單位是px,所以上訴代碼復制了一個 200×200 pixels 的矩形選區。這個選區現在可以被處理並且粘貼到原圖。
region = region.transpose(Image.ROTATE_180)
im.paste(region, box)
當你粘貼矩形選區的時候必須保證尺寸一致。此外,矩形選區不能在圖像外。然而你不必保證矩形選區和原圖的顏色模式一致,因為矩形選區會被自動轉換顏色。
5)分離和合並顏色通道
對於多通道圖像,有時候在處理時希望能夠分別對每個通道處理,處理完成後重新合成多通道,在Pillow中,很簡單,如下:
r,g,b = im.split()
im = Image.merge("RGB", (r,g,b))
對於split( )函數,如果是單通道的,則返回其本身,否則,返回各個通道。
6)幾何變換
對圖像進行幾何變換是一種基本處理,在Pillow中包括resize( )和rotate( ),如用法如下:
out = im.resize((128,128))
out = im.rotate(45) # degree conter-clockwise
其中,resize( )函數的參數是一個新圖像大小的元祖,而rotate( )則需要輸入順時針的旋轉角度。在Pillow中,對於一些常見的旋轉作了專門的定義:
out = im.transpose(Image.FLIP_LEFT_RIGHT)
out = im.transpose(Image.FLIP_TOP_BOTTOM)
out = im.transpose(Image.ROTATE_90)
out = im.transpose(Image.ROTATE_180)
out = im.transpose(Image.ROTATE_270)
7)顏色空間變換
在處理圖像時,根據需要進行顏色空間的轉換,如將彩色轉換為灰度:
cmyk = im.convert("CMYK")
gray = im.convert("L")
8)圖像濾波
圖像濾波在ImageFilter 模塊中,在該模塊中,預先定義了很多增強濾波器,可以通過filter( )函數使用,預定義濾波器包括:
BLUR、CONTOUR、DETAIL、EDGE_ENHANCE、EDGE_ENHANCE_MORE、EMBOSS、FIND_EDGES、SMOOTH、SMOOTH_MORE、SHARPEN。其中BLUR就是均值濾波,CONTOUR找輪廓,FIND_EDGES邊緣檢測,使用該模塊時,需先導入,使用方法如下:
from PIL import ImageFilter
imgF = Image.open("E:/photoshop/lena.jpg")
outF = imgF.filter(ImageFilter.DETAIL)
conF = imgF.filter(ImageFilter.CONTOUR)
edgeF = imgF.filter(ImageFilter.FIND_EDGES)
imgF.show()
outF.show()
conF.show()
edgeF.show()
除此以外,ImageFilter模塊還包括一些擴展性強的濾波器:
class PIL.ImageFilter.GaussianBlur(radius=2)
C. python怎麼用PIL模塊處理BMP圖像 二值化
遍歷圖片對象?可是怎麼個遍歷法呢?Pillow 提供了一個 .load() 方法,用來處理像素。圖片嘛,當然是二維的,有寬和高的。
pixels = image.load()
for x in ramge(image.width):
for y in range(image.height):
pixsels[x, y] = 255 if pixsels[x, y] > 125 else 0
當然了,只是最簡單的二值化的話,直接 image.convert('1') 就可以了 :-)
D. 怎麼樣在Python編程中使用Pillow來處理圖像
安裝
剛接觸Pillow的朋友先來看一下Pillow的安裝方法,在這里我們以Mac OS環境為例: (1)、使用 pip 安裝 Python 庫。pip 是 Python 的包管理工具,安裝後就可以直接在命令行一站式地安裝/管理各種庫了(pip 文檔)。
$ wget http://pypi.python.org/packages/source/p/pip/pip-0.7.2.tar.gz$ tar xzf pip-0.7.2.tar.gz$ cd pip-0.7.2$ python setup.py install
(2)、使用 pip 下載獲取 Pillow:
$ pip install pillow
(3)、安裝過程中命令行出現錯誤提示:」error: command 『clang' failed with exit status
1」。上網查閱,發現需要通過 Xcode 更新 Command Line Tool。於是打開
Xcode->Preferences->Downloads-Components選項卡。咦?竟然沒了 Command Line
Tools。再查,發現 Xcode 5 以上現在需要用命令行安裝:
$ xcode-select —install
系統會彈出安裝命令行工具的提示,點擊安裝即可。
此時再 pip install pillow,就安裝成功了。
pip freeze 命令查看已經安裝的 Python 包,Pillow 已經乖乖躺那兒了。
好了,下面開始進入教程~
Image類
Pillow中最重要的類就是Image,該類存在於同名的模塊中。可以通過以下幾種方式實例化:從文件中讀取圖片,處理其他圖片得到,或者直接創建一個圖片。
使用Image模塊中的open函數打開一張圖片:
>>> from PIL import Image>>> im = Image.open("lena.ppm")
如果打開成功,返回一個Image對象,可以通過對象屬性檢查文件內容
>>> from __future__ import print_function>>> print(im.format, im.size, im.mode)
PPM (512, 512) RGB
format屬性定義了圖像的格式,如果圖像不是從文件打開的,那麼該屬性值為None;size屬性是一個tuple,表示圖像的寬和高(單位為像素);mode屬性為表示圖像的模式,常用的模式為:L為灰度圖,RGB為真彩色,CMYK為pre-press圖像。
如果文件不能打開,則拋出IOError異常。
當有一個Image對象時,可以用Image類的各個方法進行處理和操作圖像,例如顯示圖片:
>>> im.show()
ps:標准版本的show()方法不是很有效率,因為它先將圖像保存為一個臨時文件,然後使用xv進行顯示。如果沒有安裝xv,該函數甚至不能工作。但是該方法非常便於debug和test。(windows中應該調用默認圖片查看器打開)
讀寫圖片
Pillow庫支持相當多的圖片格式。直接使用Image模塊中的open()函數讀取圖片,而不必先處理圖片的格式,Pillow庫自動根據文件決定格式。
Image模塊中的save()函數可以保存圖片,除非你指定文件格式,那麼文件名中的擴展名用來指定文件格式。
圖片轉成jpg格式
from __future__ import print_functionimport os, sysfrom PIL import Imagefor infile in sys.argv[1:]: f, e = os.path.splitext(infile) outfile = f + ".jpg" if infile != outfile: try: Image.open(infile).save(outfile) except IOError: print("cannot convert", infile)
save函數的第二個參數可以用來指定圖片格式,如果文件名中沒有給出一個標準的圖像格式,那麼第二個參數是必須的。
創建縮略圖
from __future__ import print_functionimport os, sysfrom PIL import Imagesize = (128, 128)for infile in sys.argv[1:]: outfile = os.path.splitext(infile)[0] + ".thumbnail" if infile != outfile: try: im = Image.open(infile) im.thumbnail(size) im.save(outfile, "JPEG") except IOError: print("cannot create thumbnail for", infile)
必須指出的是除非必須,Pillow不會解碼或raster數據。當你打開一個文件,Pillow通過文件頭確定文件格式,大小,mode等數據,餘下數據直到需要時才處理。
這意味著打開文件非常快,與文件大小和壓縮格式無關。下面的程序用來快速確定圖片屬性:
確定圖片屬性
from __future__ import print_functionimport sysfrom PIL import Imagefor infile in sys.argv[1:]: try: with Image.open(infile) as im: print(infile, im.format, "%dx%d" % im.size, im.mode) except IOError: pass
裁剪、粘貼、與合並圖片
Image類包含還多操作圖片區域的方法。如crop()方法可以從圖片中提取一個子矩形
從圖片中復制子圖像
box = im.() #直接復制圖像box = (100, 100, 400, 400)region = im.crop(box)
區域由4-tuple決定,該tuple中信息為(left, upper, right, lower)。 Pillow左邊系統的原點(0,0)為圖片的左上角。坐標中的數字單位為像素點,所以上例中截取的圖片大小為300*300像素^2。
處理子圖,粘貼回原圖
region = region.transpose(Image.ROTATE_180)im.paste(region, box)
將子圖paste回原圖時,子圖的region必須和給定box的region吻合。該region不能超過原圖。而原圖和region的mode不需要匹配,Pillow會自動處理。
另一個例子
Rolling an imagedef roll(image, delta): "Roll an image sideways" image = image.() #復制圖像 xsize, ysize = image.size delta = delta % xsize if delta == 0: return image part1 = image.crop((0, 0, delta, ysize)) part2 = image.crop((delta, 0, xsize, ysize)) image.paste(part2, (0, 0, xsize-delta, ysize)) image.paste(part1, (xsize-delta, 0, xsize, ysize)) return image
分離和合並通道
r, g, b = im.split()im = Image.merge("RGB", (b, g, r))
對於單通道圖片,split()返回圖像本身。為了處理單通道圖片,必須先將圖片轉成RGB。
幾何變換
Image類有resize()、rotate()和transpose()、transform()方法進行幾何變換。
簡單幾何變換
out = im.resize((128, 128))out = im.rotate(45) # 順時針角度表示
置換圖像
out = im.transpose(Image.FLIP_LEFT_RIGHT)out = im.transpose(Image.FLIP_TOP_BOTTOM)out = im.transpose(Image.ROTATE_90)out = im.transpose(Image.ROTATE_180)out = im.transpose(Image.ROTATE_270)
transpose()和象的rotate()沒有性能差別。
更通用的圖像變換方法可以使用transform()
模式轉換
convert()方法
模式轉換
im = Image.open('lena.ppm').convert('L')
圖像增強
Filter ImageFilter模塊包含很多預定義的增強filters,通過filter()方法使用
應用filters
from PIL import ImageFilterout = im.filter(ImageFilter.DETAIL)
像素點處理
point()方法通過一個函數或者查詢表對圖像中的像素點進行處理(例如對比度操作)。
像素點變換
# multiply each pixel by 1.2out = im.point(lambda i: i * 1.2)
上述方法可以利用簡單的表達式進行圖像處理,通過組合point()和paste()還能選擇性地處理圖片的某一區域。
處理單獨通道
# split the image into indivial bandssource = im.split()R, G, B = 0, 1, 2# select regions where red is less than 100mask = source[R].point(lambda i: i < 100 and 255)# process the green bandout = source[G].point(lambda i: i * 0.7)# paste the processed band back, but only where red was < 100source[G].paste(out, None, mask)# build a new multiband imageim = Image.merge(im.mode, source)
注意到創建mask的語句:
mask = source[R].point(lambda i: i < 100 and 255)
該句可以用下句表示
imout = im.point(lambda i: expression and 255)
如果expression為假則返回expression的值為0(因為and語句已經可以得出結果了),否則返回255。(mask參數用法:當為0時,保留當前值,255為使用paste進來的值,中間則用於transparency效果)
高級圖片增強
對其他高級圖片增強,應該使用ImageEnhance模塊 。一旦有一個Image對象,應用ImageEnhance對象就能快速地進行設置。 可以使用以下方法調整對比度、亮度、色平衡和銳利度。
圖像增強
from PIL import ImageEnhanceenh = ImageEnhance.Contrast(im)enh.enhance(1.3).show("30% more contrast")
動態圖
Pillow支持一些動態圖片的格式如FLI/FLC,GIF和其他一些處於實驗階段的格式。TIFF文件同樣可以包含數幀圖像。
當讀取動態圖時,PIL自動讀取動態圖的第一幀,可以使用seek和tell方法讀取不同鄭
from PIL import Imageim = Image.open("animation.gif")im.seek(1) # skip to the second frametry: while 1: im.seek(im.tell()+1) # do something to imexcept EOFError: pass # end of sequence
當讀取到最後一幀時,Pillow拋出EOFError異常。
當前版本只允許seek到下一鄭為了倒回之前,必須重新打開文件。
或者可以使用下述迭代器類
動態圖迭代器類
class ImageSequence: def __init__(self, im): self.im = im def __getitem__(self, ix): try: if ix: self.im.seek(ix) return self.im except EOFError: raise IndexError # end of sequencefor frame in ImageSequence(im): # ...do something to frame...Postscript Printing
Pillow允許通過Postscript Printer在圖片上添加images、text、graphics。
Drawing Postscriptfrom PIL import Imagefrom PIL import PSDrawim = Image.open("lena.ppm")title = "lena"box = (1*72, 2*72, 7*72, 10*72) # in pointsps = PSDraw.PSDraw() # default is sys.stdoutps.begin_document(title)# draw the image (75 dpi)ps.image(box, im, 75)ps.rectangle(box)# draw centered titleps.setfont("HelveticaNarrow-Bold", 36)w, h, b = ps.textsize(title)ps.text((4*72-w/2, 1*72-h), title)ps.end_document()
更多讀取圖片方法
之前說到Image模塊的open()函數已經足夠日常使用。該函數的參數也可以是一個文件對象。
從string中讀取
import StringIOim = Image.open(StringIO.StringIO(buffer))
從tar文件中讀取
from PIL import TarIOfp = TarIO.TarIO("Imaging.tar", "Imaging/test/lena.ppm")im = Image.open(fp)
草稿模式
draft()方法允許在不讀取文件內容的情況下盡可能(可能不會完全等於給定的參數)地將圖片轉成給定模式和大小,這在生成縮略圖的時候非常有效(速度要求比質量高的場合)。
draft模式
from __future__ import print_functionim = Image.open(file)print("original =", im.mode, im.size)im.draft("L", (100, 100))print("draft =", im.mode, im.size)
E. Python如何圖像識別
pillow包可以處理圖像
pillow:(了解)(python image library)是一個有關圖像圖片處理的包,這個包底層用的C C++,但PIL包是python2下使用。所以又更新了一個適合python3版本的、基於PIL包的新包pillow。
安裝pillow:
pip install pillow
至於識別,那就可能是文字識別或人臉識別。這需要學習很多東西,建議小白還是先把基礎學好吧。
F. python的pillow 圖像處理,我想更改PNG的背景色,原PNG是透明背景色
把PNG照片直接拖入任何一背景就行了,它是透明的。
G. pillow教程
在Python圖像庫中最重要的類是同名模塊中定義的 Image 類。您可以利用以下方法創造該類的實例:從文件中導入圖像、處理其他的圖像以及從零開始創建圖像。
從文件中導入圖像,使用在 Image 模塊中的 open() 函數:
如果成功。該函數返回一個 Image 對象。您現在可以使用實例的屬性來檢查文件內容了:
format 屬性識別圖像的來源。如果圖像不是從圖像中讀取,則該屬性設置為None。 size 屬性是一個一個包含寬和高(像素)的二元組。 mode 屬性定義圖像頻段的數量和名稱,以及像素的類型和深度。常用的模式(mode)為表示灰色圖像的「L」,表示真彩色圖像的處理問題「RGB」,以及印前圖像的畫面「CMYK」。
如何圖像不能被打開,則會報出 OSError 異常。
一旦您有 Image 類的實例,您可以使用類中定義的方法來處理和操作圖像。比如,讓我們顯示導入的圖像:
show() 的標准版本不是非常的高效,因為該函數會把圖像保存到一個臨時文件並調用實用程序來顯示圖像。如果您沒有安裝一個合適的實用程序,它甚至不會起作用。雖然當它不起作用時,調試和測試是非常方便的。
下面的章節概括了該庫提供的不同函數。
該Python圖像庫支持大量的圖像文件格式。為了從磁碟中閱讀文件,使用在 Image 模塊中的 open() 。您不需要知道打開文件的文件格式。該庫能夠自動地根據文件的內容決定格式。
為了保存一個文件,使用 Image 類中的 save() 方法。當保存文件時,名字非常重要。除非您指定格式,該庫使用文件名的後綴來發現將要使用的文件存儲格式。
提供給 save() 方法的第二個參數精準地制定了一個文件的格式。如果您使用了非標準的後綴,您必須一直使用以下方式指定格式:
值得注意的是,非必要情況該庫不會解碼或載入柵格數據(raster data)。當您打開一個文件時,文件頭將被讀取用於確定文件格式以及提取如模式、尺寸等其他解碼文件需要的性質,但是文件餘下的部分會稍後再處理。
這意味著打開一個圖像是最後的操作,它與文件大小和壓縮類型無關。這里有一種簡單的腳本可以塊度地識別圖像文件集:
Image類包含允許您操作圖像內區域的方法。為了從圖像中提取子矩形,使用crop()方法。
一個區域是一個4元組,其中坐標為(左,上,右,下)。該Python圖像庫使用左上角坐標為(0,0)的坐標系統。同樣值得注意的是,坐標是指像素間的位置,因此上例中的區域正好為300x300的像素。
該區域現在能以某種方法進行處理並粘貼回去。
當將區域粘貼回去時,區域的大小必須准確地匹配給定的區域。此外,區域不能拓展到圖像之外。然而,原始圖像和區域的模式不必相匹。如果相同,則區域會在被粘貼前自動地轉換(有關詳細信息,請參閱下面的 顏色轉換 部分)。
這里有一個額外的例子:
對於更高級的技巧,paste方法可以將透明掩碼(transparency mask)作為可選參數。在掩碼中,數值255被粘貼的圖像在該位置是不透明的(即,被粘貼的圖像就是原圖粘貼)。數值0表示被粘貼的圖像是完全透明的。在0和255之間的數值表示不同級別的透明程度。例如,粘貼一個RGBA圖像並將其作為掩碼會粘貼圖像的不透明部分,但不會粘貼其透明背景。
該Python圖像庫也允許您在多頻段圖像中的單個頻段中進行工作,例如RGB圖像。split方法創造了新的圖像集,每一個都包含了來自原始多頻段圖像的一個頻段。合並函數將一個模式和圖像組作為輸入,並將其組合為新圖像。下面示例交換了一個RGB圖像的三個頻段:
值得注意的是,對一個單波段圖像而言, split() 返回圖像本身。要在單個顏色頻段上工作,您可能需要首先將圖像轉換為"RGB"。
PIL.Image.Image 類包含調整( resize() )和旋轉( rotate() )一個圖像的方法。前者通過輸入元組來確定新的圖片大小,後者通過輸入的角度以逆時間旋轉圖片。
若要90度旋轉圖像,您即可以使用 rotate() 方法,也可以使用 transpose() 方法。後者還可以在水平或垂直軸周圍翻轉圖像。
transpose(ROTATE)也可以和 rotate() 執行的結果相同,前提是rotate()中的expand標志設置為真,用以提供圖像尺寸的相同更改。
圖像轉換的一種更一般的形式是通過 transform() 方法執行。
該Python圖像庫允許您使用convert()方法在不同的像素表示間轉換圖像。
該庫可以在每個支持的模式和「L」以及「RGB」模式間進行轉換。為了在其他模式間進行轉換,您可能會使用到一個中間圖像(通常為「RGB」圖像)。
該Python圖像庫提供了大量的方法和模塊用於增強圖像。
ImageFilter 模塊包含了許多能和 filter() 方法一起使用的預定義的增強過濾器。
point() 方法用於翻譯圖像的像素值(如圖像對比度操作)。在多數情況下,一個函數對象期望一個傳遞給方法的參數。每一個像素都按照函數進行處理:
使用以上方法,您可以快速地在圖像上應用任何簡單的表達式。您還可以通過結合 point() 和 paste() 方法來有選擇性地修改圖像:
以下語法用於創造掩碼:
Python僅評估確定結果所需的邏輯表達部分,並返回作為表達結果檢查的最後值。因此,如果以上表達式為假(0),Python不再查看第二個操作數,並返回0。相反地,返回255。
對更先進的圖像增強,您可以使用 ImageEnhance 模塊中的類。一旦從圖像創建,增強對象可用於快速嘗試不同的設置。
您可以通過這種方式調整對比度、亮度、顏色平衡和銳度。
該Python圖像庫包含一些對圖像序列(也稱為動畫支持)的基礎支持。支持的序列格式包括FLI/FLC,GIF,以及一些實驗格式。TIgFF文件還可以包含多個幀。
當您打開一個序列文件,PIL自動地導入序列的第一幀。您可以使用seek並告訴方法在不同幀之間移動:
如例所見,當序列結束時,您會得到一個 EOFError 異常。
下列類允許您使用for語句循環序列:
該Python圖像庫包含在PostScript列印機上列印圖像、文本以及圖形的功能。下面是一個簡單的示例:
如早前描述的一樣, Image 模塊中的 open() 函數用於打開圖像文件。在大部分情況下,您簡單地傳入文件名作為一個參數。Image.open能作為文本管理器:
您可以使用一個類文件對象來代替文件名。這個對戲必須實現必須實現file.read、file.seek和file.tell方法,且必須以二進制模式打開。
要從二進制數據中讀取圖像,請使用 Bytes10 類:
請注意,庫在閱讀圖像頭部之前會倒帶文件(使用seek(0))。此外,當讀取圖像數據時(通過load方法),還將使用seek。如果圖像文件嵌入到較大的文件中,例如tar文件,您可以使用 ContainerIO 或 TarIO 模塊來訪問它。
一些解碼器允許您在從文件中讀取圖像時對其進行操作。這通常被用於創建縮略圖(當速度遠大於質量時)和列印到單色激光列印機(當只需要圖像的灰度版本時)的解碼過程。
draft()方法操縱打開但尚未載入的圖像,以便盡可能與給定的模式和大小匹配。這是通過重新配置圖像解碼器來完成的。
這只適用於JPEG和MPO文件。
列印結果如下:
值得注意的是,生成的圖像可能不會精確地匹配要求的模式和尺寸。為了確保圖像不大於給定的尺寸,請使用thumbnail方法。
H. python pillow import問題
你的pillow都裝在了第三方編輯器anocoda上了,或者說在你安裝anaconda時,是anaconda安裝包附帶的模塊,換句話只能在anaconda編輯器下使用,也就是python自身並不存在完整的pillow模塊。
兩個方法解決:
1.在anaconda下運行使用pillow
2.重新安裝pillow,把pillow安裝在Python自身的模塊下,,不要用 py -3 -m pip install 命令了,使用命令pip install pillow(或者pip3 install pillow)
I. Python圖像處理庫Pillow
Pillow庫安裝成功後,導包時要用PIL來導入 ,而不能用pillow或Pillow。
運行結果:
J. python的pillow庫怎麼使用
Pillow是Python里的圖像處理庫(PIL:Python Image Library),提供了了廣泛的文件格式支持,強大的圖像處理能力,主要包括圖像儲存、圖像顯示、格式轉換以及基本的圖像處理操作等。
1)使用 Image 類
PIL最重要的類是 Image class, 你可以通過多種方法創建這個類的實例;你可以從文件載入圖像,或者處理其他圖像, 或者從 scratch 創建。
要從文件載入圖像,可以使用open( )函數,在Image模塊中:
[python]view plain
>>>fromPILimportImage
>>>im=Image.open("E:/photoshop/1.jpg")
載入成功後,將返回一個Image對象,可以通過使用示例屬性查看文件內容:
[python]view plain
>>>print(im.format,im.size,im.mode)
('JPEG',(600,351),'RGB')
>>>
format這個屬性標識了圖像來源。如果圖像不是從文件讀取它的值就是None。size屬性是一個二元tuple,包含width和height(寬度和高度,單位都是px)。mode屬性定義了圖像bands的數量和名稱,以及像素類型和深度。常見的modes 有 「L」 (luminance) 表示灰度圖像, 「RGB」 表示真彩色圖像, and 「CMYK」 表示出版圖像。
如果文件打開錯誤,返回IOError錯誤。
只要你有了 Image 類的實例,你就可以通過類的方法處理圖像。比如,下列方法可以顯示圖像:
[python]view plain
im.show()
2)讀寫圖像
PIL 模塊支持大量圖片格式。使用在 Image 模塊的 open() 函數從磁碟讀取文件。你不需要知道文件格式就能打開它,這個庫能夠根據文件內容自動確定文件格式。要保存文件,使用 Image 類的 save() 方法。保存文件的時候文件名變得重要了。除非你指定格式,否則這個庫將會以文件名的擴展名作為格式保存。
載入文件,並轉化為png格式:
[python]view plain
"PythonImageLibraryTest"
fromPILimportImage
importos
importsys
forinfileinsys.argv[1:]:
f,e=os.path.splitext(infile)
outfile=f+".png"
ifinfile!=outfile:
try:
Image.open(infile).save(outfile)
exceptIOError:
print("Cannotconvert",infile)
save() 方法的第二個參數可以指定文件格式。
3)創建縮略圖
縮略圖是網路開發或圖像軟體預覽常用的一種基本技術,使用Python的Pillow圖像庫可以很方便的建立縮略圖,如下:
[python]view plain
#createthumbnail
size=(128,128)
forinfileinglob.glob("E:/photoshop/*.jpg"):
f,ext=os.path.splitext(infile)
img=Image.open(infile)
img.thumbnail(size,Image.ANTIALIAS)
img.save(f+".thumbnail","JPEG")
上段代碼對photoshop下的jpg圖像文件全部創建縮略圖,並保存,glob模塊是一種智能化的文件名匹配技術,在批圖像處理中經常會用到。
注意:Pillow庫不會直接解碼或者載入圖像柵格數據。當你打開一個文件,只會讀取文件頭信息用來確定格式,顏色模式,大小等等,文件的剩餘部分不會主動處理。這意味著打開一個圖像文件的操作十分快速,跟圖片大小和壓縮方式無關。
4)圖像的剪切、粘貼與合並操作
Image 類包含的方法允許你操作圖像部分選區,PIL.Image.Image.crop 方法獲取圖像的一個子矩形選區,如:
[python]view plain
#crop,pasteandmerge
im=Image.open("E:/photoshop/lena.jpg")
box=(100,100,300,300)
region=im.crop(box)
矩形選區有一個4元元組定義,分別表示左、上、右、下的坐標。這個庫以左上角為坐標原點,單位是px,所以上訴代碼復制了一個 200x200 pixels 的矩形選區。這個選區現在可以被處理並且粘貼到原圖。
[python]view plain
region=region.transpose(Image.ROTATE_180)
im.paste(region,box)
當你粘貼矩形選區的時候必須保證尺寸一致。此外,矩形選區不能在圖像外。然而你不必保證矩形選區和原圖的顏色模式一致,因為矩形選區會被自動轉換顏色。
5)分離和合並顏色通道
對於多通道圖像,有時候在處理時希望能夠分別對每個通道處理,處理完成後重新合成多通道,在Pillow中,很簡單,如下:
[python]view plain
r,g,b=im.split()
im=Image.merge("RGB",(r,g,b))
對於split( )函數,如果是單通道的,則返回其本身,否則,返回各個通道。
6)幾何變換
對圖像進行幾何變換是一種基本處理,在Pillow中包括resize( )和rotate( ),如用法如下:
[python]view plain
out=im.resize((128,128))
out=im.rotate(45)#degreeconter-clockwise
其中,resize( )函數的參數是一個新圖像大小的元祖,而rotate( )則需要輸入順時針的旋轉角度。在Pillow中,對於一些常見的旋轉作了專門的定義:
[python]view plain
out=im.transpose(Image.FLIP_LEFT_RIGHT)
out=im.transpose(Image.FLIP_TOP_BOTTOM)
out=im.transpose(Image.ROTATE_90)
out=im.transpose(Image.ROTATE_180)
out=im.transpose(Image.ROTATE_270)
7)顏色空間變換
在處理圖像時,根據需要進行顏色空間的轉換,如將彩色轉換為灰度:
[python]view plain
cmyk=im.convert("CMYK")
gray=im.convert("L")
8)圖像濾波
圖像濾波在ImageFilter 模塊中,在該模塊中,預先定義了很多增強濾波器,可以通過filter( )函數使用,預定義濾波器包括:
BLUR、CONTOUR、DETAIL、EDGE_ENHANCE、EDGE_ENHANCE_MORE、EMBOSS、FIND_EDGES、SMOOTH、SMOOTH_MORE、SHARPEN。其中BLUR就是均值濾波,CONTOUR找輪廓,FIND_EDGES邊緣檢測,使用該模塊時,需先導入,使用方法如下:
[python]view plain
fromPILimportImageFilter
imgF=Image.open("E:/photoshop/lena.jpg")
outF=imgF.filter(ImageFilter.DETAIL)
conF=imgF.filter(ImageFilter.CONTOUR)
edgeF=imgF.filter(ImageFilter.FIND_EDGES)
imgF.show()
outF.show()
conF.show()
edgeF.show()
除此以外,ImageFilter模塊還包括一些擴展性強的濾波器:
classPIL.ImageFilter.GaussianBlur(radius=2)
Gaussian blur filter.
參數:
radius– Blur radius.classPIL.ImageFilter.UnsharpMask(radius=2,percent=150,threshold=3)
Unsharp mask filter.
See Wikipedia』s entry ondigital unsharp maskingfor an explanation of the parameters.
classPIL.ImageFilter.Kernel(size,kernel,scale=None,offset=0)
Create a convolution kernel. The current version only supports 3x3 and 5x5 integer and floating point kernels.
In the current version, kernels can only be applied to 「L」 and 「RGB」 images.
參數:
size– Kernel size, given as (width, height). In the current version, this must be (3,3) or (5,5).
kernel– A sequence containing kernel weights.
scale– Scale factor. If given, the result for each pixel is divided by this value. the default is the sum of the kernel weights.
offset– Offset. If given, this value is added to the result, after it has been divided by the scale factor.
classPIL.ImageFilter.RankFilter(size,rank)
Create a rank filter. The rank filter sorts all pixels in a window of the given size, and returns therank『th value.
參數:
size– The kernel size, in pixels.
rank– What pixel value to pick. Use 0 for a min filter,size*size/2for a median filter,size*size-1for a max filter, etc.
classPIL.ImageFilter.MedianFilter(size=3)
Create a median filter. Picks the median pixel value in a window with the given size.
參數:
size– The kernel size, in pixels.classPIL.ImageFilter.MinFilter(size=3)
Create a min filter. Picks the lowest pixel value in a window with the given size.
參數:
size– The kernel size, in pixels.classPIL.ImageFilter.MaxFilter(size=3)
Create a max filter. Picks the largest pixel value in a window with the given size.
參數:
size– The kernel size, in pixels.classPIL.ImageFilter.ModeFilter(size=3)
Create a mode filter. Picks the most frequent pixel value in a box with the given size. Pixel values that occur only once or twice are ignored; if no pixel value occurs more than twice, the original pixel value is preserved.
參數:
size– The kernel size, in pixels.更多詳細內容可以參考:PIL/ImageFilter
9)圖像增強
圖像增強也是圖像預處理中的一個基本技術,Pillow中的圖像增強函數主要在ImageEnhance模塊下,通過該模塊可以調節圖像的顏色、對比度和飽和度和銳化等:
[python]view plain
fromPILimportImageEnhance
imgE=Image.open("E:/photoshop/lena.jpg")
imgEH=ImageEnhance.Contrast(imgE)
imgEH.enhance(1.3).show("30%morecontrast")
圖像增強:
classPIL.ImageEnhance.Color(image)
Adjust image color balance.
This class can be used to adjust the colour balance of an image, in a manner similar to the controls on a colour TV set. An enhancement factor of 0.0 gives a black and white image. A factor of 1.0 gives the original image.
classPIL.ImageEnhance.Contrast(image)
Adjust image contrast.
This class can be used to control the contrast of an image, similar to the contrast control on a TV set. An enhancement factor of 0.0 gives a solid grey image. A factor of 1.0 gives the original image.
classPIL.ImageEnhance.Brightness(image)
Adjust image brightness.
This class can be used to control the brighntess of an image. An enhancement factor of 0.0 gives a black image. A factor of 1.0 gives the original image.
classPIL.ImageEnhance.Sharpness(image)
Adjust image sharpness.
This class can be used to adjust the sharpness of an image. An enhancement factor of 0.0 gives a blurred image, a factor of 1.0 gives the original image, and a factor of 2.0 gives a sharpened image.
圖像增強的詳細內容可以參考:PIL/ImageEnhance
除了以上介紹的內容外,Pillow還有很多強大的功能:
PIL.Image.alpha_composite(im1,im2)
PIL.Image.blend(im1,im2,alpha)
PIL.Image.composite(image1,image2,mask)
PIL.Image.eval(image,*args)
PIL.Image.fromarray(obj,mode=None)
PIL.Image.frombuffer(mode,size,data,decoder_name='raw',*args)