python增強圖片對比度(python圖片對比並確定)

本文目錄一覽:

python可以用來處理圖像嗎

可以的,

PythonWare公司提供了免費的Python圖像處理工具包PIL(Python Image Library),該軟體包提供了基本的圖像處理功能,如:

改變圖像大小,旋轉圖像,圖像格式轉換,色場空間轉換,圖像增強,直方圖處理,插值和濾波等等。雖然在這個軟體包上要實現類似MATLAB中的複雜的圖像處理演算法並不太適合,但是Python的快速開發能力以及面向對象等等諸多特點使得它非常適合用來進行原型開發。

在PIL中,任何一副圖像都是用一個Image對象表示,而這個類由和它同名的模塊導出,因此,最簡單的形式是這樣的:

import Image img = Image.open(「dip.jpg」)

注意:第一行的Image是模塊名;第二行的img是一個Image對象;

Image類是在Image模塊中定義的。關於Image模塊和Image類,切記不要混淆了。現在,我們就可以對img進行各種操作了,所有對img的

操作最終都會反映到到dip.img圖像上。

PIL提供了豐富的功能模塊:Image,ImageDraw,ImageEnhance,ImageFile等等。最常用到的模塊是

Image,ImageDraw,ImageEnhance這三個模塊。下面我對此分別做一介紹。關於其它模塊的使用請參見說明文檔.有關PIL軟體包和

相關的說明文檔可在PythonWare的站點上獲得。

Image模塊:

Image模塊是PIL最基本的模塊,其中導出了Image類,一個Image類實例對象就對應了一副圖像。同時,Image模塊還提供了很多有用的函數。

(1)打開一文件:

import Image img = Image.open(「dip.jpg」)

這將返回一個Image類實例對象,後面的所有的操作都是在img上完成的。

(2)調整文件大小:

import Image img = Image.open(“img.jpg”) new_img = img.resize

((128,128),Image.BILINEAR) new_img.save(“new_img.jpg”)

原來的圖像大小是256×256,現在,保存的new_img.jpg的大小是128×128。

就是這麼簡單,需要說明的是Image.BILINEAR指定採用雙線性法對像素點插值。

在批處理或者簡單的Python圖像處理任務中,採用Python和PIL(Python Image Library)的組合來完成圖像處理任務是一個很不錯的選擇。設想有一個需要對某個文件夾下的所有圖像將對比度提高2倍的任務。用Python來做將是十分簡單的。當然,我也不得不承認Python在圖像處理方面的功能還比較弱,顯然還不適合用來進行濾波、特徵提取等等一些更為複雜的應用。我個人的觀點是,當你要實現這些「高級」的演算法的時候,好吧,把它交給MATLAB去完成。但是,如果你面對的只是一個通常的不要求很複雜演算法的圖像處理任務,那麼,Python圖像處理應該才是你的最佳搭檔。

python的pillow庫怎麼使用

Pillow是Python里的圖像處理庫(PIL:Python Image Library),提供了了廣泛的文件格式支持,強大的圖像處理能力,主要包括圖像儲存、圖像顯示、格式轉換以及基本的圖像處理操作等。

1)使用 Image 類

PIL最重要的類是 Image class, 你可以通過多種方法創建這個類的實例;你可以從文件載入圖像,或者處理其他圖像, 或者從 scratch 創建。

要從文件載入圖像,可以使用open( )函數,在Image模塊中:

[python] view plain copy

 from PIL import Image

 im = Image.open(“E:/photoshop/1.jpg”)

載入成功後,將返回一個Image對象,可以通過使用示例屬性查看文件內容:

[python] view plain copy

 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 copy

im.show()

2)讀寫圖像

PIL 模塊支持大量圖片格式。使用在 Image 模塊的 open() 函數從磁碟讀取文件。你不需要知道文件格式就能打開它,這個庫能夠根據文件內容自動確定文件格式。要保存文件,使用 Image 類的 save() 方法。保存文件的時候文件名變得重要了。除非你指定格式,否則這個庫將會以文件名的擴展名作為格式保存。

載入文件,並轉化為png格式:

[python] view plain copy

“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圖像庫可以很方便的建立縮略圖,如下:

[python] view plain copy

# 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 方法獲取圖像的一個子矩形選區,如:

[python] view plain copy

# 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 的矩形選區。這個選區現在可以被處理並且粘貼到原圖。

[python] view plain copy

region = region.transpose(Image.ROTATE_180)

im.paste(region, box)

當你粘貼矩形選區的時候必須保證尺寸一致。此外,矩形選區不能在圖像外。然而你不必保證矩形選區和原圖的顏色模式一致,因為矩形選區會被自動轉換顏色。

5)分離和合併顏色通道

對於多通道圖像,有時候在處理時希望能夠分別對每個通道處理,處理完成後重新合成多通道,在Pillow中,很簡單,如下:

[python] view plain copy

r,g,b = im.split()

im = Image.merge(“RGB”, (r,g,b))

對於split( )函數,如果是單通道的,則返回其本身,否則,返回各個通道。

6)幾何變換

對圖像進行幾何變換是一種基本處理,在Pillow中包括resize( )和rotate( ),如用法如下:

[python] view plain copy

out = im.resize((128,128))

out = im.rotate(45)  # degree conter-clockwise

其中,resize( )函數的參數是一個新圖像大小的元祖,而rotate( )則需要輸入順時針的旋轉角度。在Pillow中,對於一些常見的旋轉作了專門的定義:

[python] view plain copy

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 copy

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 copy

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)

Gaussian blur filter.

參數:

radius – Blur radius.    

class PIL.ImageFilter.UnsharpMask(radius=2, percent=150, threshold=3)

Unsharp mask filter.

See Wikipedia』s entry on digital unsharp masking for an explanation of the parameters.

class PIL.ImageFilter.Kernel(size, kernel, scale=None, offset=0)

Create a convolution kernel. The current version only supports 3×3 and 5×5 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.

class PIL.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 / 2 for a median filter, size * size – 1 for a max filter, etc.

class PIL.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.    

class PIL.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.    

class PIL.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.    

class PIL.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 copy

from PIL import ImageEnhance

imgE = Image.open(“E:/photoshop/lena.jpg”)

imgEH = ImageEnhance.Contrast(imgE)

imgEH.enhance(1.3).show(“30% more contrast”)

圖像增強:

class PIL.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.

class PIL.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.

class PIL.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.

class PIL.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)

如何進行圖像增強 python

對單張圖像進行圖像對比度增強:

from PIL import Imagefrom PIL import ImageEnhanceimg = Image.open(‘./0h/FGF2.tif’)img.show()#對比度增強 enh_con = ImageEnhance.Contrast(img)contrast = 1.5 img_contrasted = enh_con.enhance(contrast)img_contrasted.show()img_contrasted.save(“./0h/FGF2-new.tif”)

python:PIL圖像處理

PIL (Python Imaging Library)

Python圖像處理庫,該庫支持多種文件格式,提供強大的圖像處理功能。

PIL中最重要的類是Image類,該類在Image模塊中定義。

從文件載入圖像:

如果成功,這個函數返回一個Image對象。現在你可以使用該對象的屬性來探索文件的內容。

format 屬性指定了圖像文件的格式,如果圖像不是從文件中載入的則為 None 。

size 屬性是一個2個元素的元組,包含圖像寬度和高度(像素)。

mode 屬性定義了像素格式,常用的像素格式為:「L」 (luminance) – 灰度圖, 「RGB」 , 「CMYK」。

如果文件打開失敗, 將拋出IOError異常。

一旦你擁有一個Image類的實例,你就可以用該類定義的方法操作圖像。比如:顯示

( show() 的標準實現不是很有效率,因為它將圖像保存到一個臨時文件,然後調用外部工具(比如系統的默認圖片查看軟體)顯示圖像。該函數將是一個非常方便的調試和測試工具。)

接下來的部分展示了該庫提供的不同功能。

PIL支持多種圖像格式。從磁碟中讀取文件,只需使用 Image 模塊中的 open 函數。不需要提供文件的圖像格式。PIL庫將根據文件內容自動檢測。

如果要保存到文件,使用 Image 模塊中的 save 函數。當保存文件時,文件名很重要,除非指定格式,否則PIL庫將根據文件的擴展名來決定使用哪種格式保存。

** 轉換文件到JPEG **

save 函數的第二個參數可以指定使用的文件格式。如果文件名中使用了一個非標準的擴展名,則必須通過第二個參數來指定文件格式。

** 創建JPEG縮略圖 **

需要注意的是,PIL只有在需要的時候才載入像素數據。當你打開一個文件時,PIL只是讀取文件頭獲得文件格式、圖像模式、圖像大小等屬性,而像素數據只有在需要的時候才會載入。

這意味著打開一個圖像文件是一個非常快的操作,不會受文件大小和壓縮演算法類型的影響。

** 獲得圖像信息 **

Image 類提供了某些方法,可以操作圖像的子區域。提取圖像的某個子區域,使用 crop() 函數。

** 複製圖像的子區域 **

定義區域使用一個包含4個元素的元組,(left, upper, right, lower)。坐標原點位於左上角。上面的例子提取的子區域包含300×300個像素。

該區域可以做接下來的處理然後再粘貼回去。

** 處理子區域然後粘貼回去 **

當往回粘貼時,區域的大小必須和參數匹配。另外區域不能超出圖像的邊界。然而原圖像和區域的顏色模式無需匹配。區域會自動轉換。

** 滾動圖像 **

paste() 函數有個可選參數,接受一個掩碼圖像。掩碼中255表示指定位置為不透明,0表示粘貼的圖像完全透明,中間的值表示不同級別的透明度。

PIL允許分別操作多通道圖像的每個通道,比如RGB圖像。 split() 函數創建一個圖像集合,每個圖像包含一個通道。 merge() 函數接受一個顏色模式和一個圖像元組,然後將它們合併為一個新的圖像。接下來的例子交換了一個RGB圖像的三個通道。

** 分離和合併圖像通道 **

對於單通道圖像, split() 函數返回圖像本身。如果想處理各個顏色通道,你可能需要先將圖像轉為RGB模式。

resize() 函數接受一個元組,指定圖像的新大小。

rotate() 函數接受一個角度值,逆時針旋轉。

** 基本幾何變換 **

圖像旋轉90度也可以使用 transpose() 函數。 transpose() 函數也可以水平或垂直翻轉圖像。

** transpose **

transpose() 和 rotate() 函數在性能和結果上沒有區別。

更通用的圖像變換函數為 transform() 。

PIL可以轉換圖像的像素模式。

** 轉換顏色模式 **

PIL庫支持從其他模式轉為「L」或「RGB」模式,其他模式之間轉換,則需要使用一個中間圖像,通常是「RGB」圖像。

ImageFilter 模塊包含多個預定義的圖像增強過濾器用於 filter() 函數。

** 應用過濾器 **

point() 函數用於操作圖像的像素值。該函數通常需要傳入一個函數對象,用於操作圖像的每個像素:

** 應用點操作 **

使用以上技術可以快速地對圖像像素應用任何簡單的表達式。可以結合 point() 函數和 paste 函數修改圖像。

** 處理圖像的各個通道 **

注意用於創建掩碼圖像的語法:

Python計算邏輯表達式採用短路方式,即:如果and運算符左側為false,就不再計算and右側的表達式,而且返回結果是表達式的結果。比如 a and b 如果a為false則返回a,如果a為true則返回b,詳見Python語法。

對於更多高級的圖像增強功能,可以使用 ImageEnhance 模塊中的類。

可以調整圖像對比度、亮度、色彩平衡、銳度等。

** 增強圖像 **

PIL庫包含對圖像序列(動畫格式)的基本支持。支持的序列格式包括 FLI/FLC 、 GIF 和一些實驗性的格式。 TIFF 文件也可以包含多個幀。

當打開一個序列文件時,PIL庫自動載入第一幀。你可以使用 seek() 函數 tell() 函數在不同幀之間移動。

** 讀取序列 **

如例子中展示的,當序列到達結尾時,將拋出EOFError異常。

注意當前版本的庫中多數底層驅動只允許seek到下一幀。如果想回到前面的幀,只能重新打開圖像。

以下迭代器類允許在for語句中循環遍歷序列:

** 一個序列迭代器類 **

PIL庫包含一些函數用於將圖像、文本列印到Postscript印表機。以下是一個簡單的例子。

** 列印到Postscript **

如前所述,可以使用 open() 函數打開圖像文件,通常傳入一個文件名作為參數:

如果打開成功,返回一個Image對象,否則拋出IOError異常。

也可以使用一個file-like object代替文件名(暫可以理解為文件句柄)。該對象必須實現read,seek,tell函數,必須以二進位模式打開。

** 從文件句柄打開圖像 **

如果從字元串數據中讀取圖像,使用StringIO類:

** 從字元串中讀取 **

如果圖像文件內嵌在一個大文件里,比如 tar 文件中。可以使用ContainerIO或TarIO模塊來訪問。

** 從tar文檔中讀取 **

** 該小節不太理解,請參考原文 **

有些解碼器允許當讀取文件時操作圖像。通常用於在創建縮略圖時加速解碼(當速度比質量重要時)和輸出一個灰度圖到激光印表機時。

draft() 函數。

** Reading in draft mode **

輸出類似以下內容:

注意結果圖像可能不會和請求的模式和大小匹配。如果要確保圖像不大於指定的大小,請使用 thumbnail 函數。

Python2.7 教程 PIL

Python 之 使用 PIL 庫做圖像處理

來自

原創文章,作者:HWLWG,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/330537.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
HWLWG的頭像HWLWG
上一篇 2025-01-16 15:46
下一篇 2025-01-16 15:46

相關推薦

  • Python周杰倫代碼用法介紹

    本文將從多個方面對Python周杰倫代碼進行詳細的闡述。 一、代碼介紹 from urllib.request import urlopen from bs4 import Bea…

    編程 2025-04-29
  • Python計算陽曆日期對應周幾

    本文介紹如何通過Python計算任意陽曆日期對應周幾。 一、獲取日期 獲取日期可以通過Python內置的模塊datetime實現,示例代碼如下: from datetime imp…

    編程 2025-04-29
  • 如何查看Anaconda中Python路徑

    對Anaconda中Python路徑即conda環境的查看進行詳細的闡述。 一、使用命令行查看 1、在Windows系統中,可以使用命令提示符(cmd)或者Anaconda Pro…

    編程 2025-04-29
  • Python中引入上一級目錄中函數

    Python中經常需要調用其他文件夾中的模塊或函數,其中一個常見的操作是引入上一級目錄中的函數。在此,我們將從多個角度詳細解釋如何在Python中引入上一級目錄的函數。 一、加入環…

    編程 2025-04-29
  • Python列表中負數的個數

    Python列表是一個有序的集合,可以存儲多個不同類型的元素。而負數是指小於0的整數。在Python列表中,我們想要找到負數的個數,可以通過以下幾個方面進行實現。 一、使用循環遍歷…

    編程 2025-04-29
  • Python清華鏡像下載

    Python清華鏡像是一個高質量的Python開發資源鏡像站,提供了Python及其相關的開發工具、框架和文檔的下載服務。本文將從以下幾個方面對Python清華鏡像下載進行詳細的闡…

    編程 2025-04-29
  • Python字典去重複工具

    使用Python語言編寫字典去重複工具,可幫助用戶快速去重複。 一、字典去重複工具的需求 在使用Python編寫程序時,我們經常需要處理數據文件,其中包含了大量的重複數據。為了方便…

    編程 2025-04-29
  • 蝴蝶優化演算法Python版

    蝴蝶優化演算法是一種基於仿生學的優化演算法,模仿自然界中的蝴蝶進行搜索。它可以應用於多個領域的優化問題,包括數學優化、工程問題、機器學習等。本文將從多個方面對蝴蝶優化演算法Python版…

    編程 2025-04-29
  • Python程序需要編譯才能執行

    Python 被廣泛應用於數據分析、人工智慧、科學計算等領域,它的靈活性和簡單易學的性質使得越來越多的人喜歡使用 Python 進行編程。然而,在 Python 中程序執行的方式不…

    編程 2025-04-29
  • python強行終止程序快捷鍵

    本文將從多個方面對python強行終止程序快捷鍵進行詳細闡述,並提供相應代碼示例。 一、Ctrl+C快捷鍵 Ctrl+C快捷鍵是在終端中經常用來強行終止運行的程序。當你在終端中運行…

    編程 2025-04-29

發表回復

登錄後才能評論