python圖像剪切函數(shù) python 剪切圖片

如何在python中從調(diào)用cv2.imread()后得到的圖片中截取一塊矩形部分?

1、首先導(dǎo)入os模塊。os模塊直接和操作系統(tǒng)聯(lián)系。

10年積累的網(wǎng)站設(shè)計制作、成都網(wǎng)站設(shè)計經(jīng)驗,可以快速應(yīng)對客戶對網(wǎng)站的新想法和需求。提供各種問題對應(yīng)的解決方案。讓選擇我們的客戶得到更好、更有力的網(wǎng)絡(luò)服務(wù)。我雖然不認識你,你也不認識我。但先建設(shè)網(wǎng)站后付款的網(wǎng)站建設(shè)流程,更有赤峰免費網(wǎng)站建設(shè)讓你可以放心的選擇與我們合作。

2、然后調(diào)用wav文件。os.system()函數(shù)調(diào)用聲音文件‘gx.wav'。

3、測試結(jié)果如圖,要有音箱或耳麥才能聽到。

4、接著run運行,或按f5鍵。

5、wav文件可以調(diào)用,mp3文件也可以調(diào)用哦。音樂文件的文件名及后綴改為.mpe3。其余代碼不變。

python圖像處理初學(xué)者求助

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

1)使用 Image 類

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

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

1

2

from PIL import Image

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

加載成功后,將返回一個Image對象,可以通過使用示例屬性查看文件內(nèi)容:

1

2

3

print(im.format, im.size, im.mode)

('JPEG', (600, 351), 'RGB')

format 這個屬性標識了圖像來源。如果圖像不是從文件讀取它的值就是None。size屬性是一個二元tuple,包含width和height(寬度和高度,單位都是px)。 mode 屬性定義了圖像bands的數(shù)量和名稱,以及像素類型和深度。常見的modes 有 “L” (luminance) 表示灰度圖像, “RGB” 表示真彩色圖像, and “CMYK” 表示出版圖像。

如果文件打開錯誤,返回 IOError 錯誤。

只要你有了 Image 類的實例,你就可以通過類的方法處理圖像。比如,下列方法可以顯示圖像:

1

im.show()

2)讀寫圖像

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

加載文件,并轉(zhuǎn)化為png格式:

1

2

3

4

5

6

7

8

9

10

11

12

13

"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() 方法的第二個參數(shù)可以指定文件格式。

3)創(chuàng)建縮略圖

縮略圖是網(wǎng)絡(luò)開發(fā)或圖像軟件預(yù)覽常用的一種基本技術(shù),使用Python的Pillow圖像庫可以很方便的建立縮略圖,如下:

1

2

3

4

5

6

7

# 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圖像文件全部創(chuàng)建縮略圖,并保存,glob模塊是一種智能化的文件名匹配技術(shù),在批圖像處理中經(jīng)常會用到。

注意:Pillow庫不會直接解碼或者加載圖像柵格數(shù)據(jù)。當你打開一個文件,只會讀取文件頭信息用來確定格式,顏色模式,大小等等,文件的剩余部分不會主動處理。這意味著打開一個圖像文件的操作十分快速,跟圖片大小和壓縮方式無關(guān)。

4)圖像的剪切、粘貼與合并操作

Image 類包含的方法允許你操作圖像部分選區(qū),PIL.Image.Image.crop 方法獲取圖像的一個子矩形選區(qū),如:

1

2

3

4

# crop, paste and merge

im = Image.open("E:/photoshop/lena.jpg")

box = (100,100,300,300)

region = im.crop(box)

矩形選區(qū)有一個4元元組定義,分別表示左、上、右、下的坐標。這個庫以左上角為坐標原點,單位是px,所以上訴代碼復(fù)制了一個 200×200 pixels 的矩形選區(qū)。這個選區(qū)現(xiàn)在可以被處理并且粘貼到原圖。

1

2

region = region.transpose(Image.ROTATE_180)

im.paste(region, box)

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

5)分離和合并顏色通道

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

1

2

r,g,b = im.split()

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

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

6)幾何變換

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

1

2

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

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

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

1

2

3

4

5

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)顏色空間變換

在處理圖像時,根據(jù)需要進行顏色空間的轉(zhuǎn)換,如將彩色轉(zhuǎn)換為灰度:

1

2

cmyk = im.convert("CMYK")

gray = im.convert("L")

8)圖像濾波

python:PIL圖像處理

PIL (Python Imaging Library)

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

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

從文件加載圖像:

如果成功,這個函數(shù)返回一個Image對象。現(xiàn)在你可以使用該對象的屬性來探索文件的內(nèi)容。

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

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

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

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

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

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

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

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

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

** 轉(zhuǎn)換文件到JPEG **

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

** 創(chuàng)建JPEG縮略圖 **

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

這意味著打開一個圖像文件是一個非??斓牟僮鳎粫芪募笮『蛪嚎s算法類型的影響。

** 獲得圖像信息 **

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

** 復(fù)制圖像的子區(qū)域 **

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

該區(qū)域可以做接下來的處理然后再粘貼回去。

** 處理子區(qū)域然后粘貼回去 **

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

** 滾動圖像 **

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

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

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

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

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

rotate() 函數(shù)接受一個角度值,逆時針旋轉(zhuǎn)。

** 基本幾何變換 **

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

** transpose **

transpose() 和 rotate() 函數(shù)在性能和結(jié)果上沒有區(qū)別。

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

PIL可以轉(zhuǎn)換圖像的像素模式。

** 轉(zhuǎn)換顏色模式 **

PIL庫支持從其他模式轉(zhuǎn)為“L”或“RGB”模式,其他模式之間轉(zhuǎn)換,則需要使用一個中間圖像,通常是“RGB”圖像。

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

** 應(yīng)用過濾器 **

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

** 應(yīng)用點操作 **

使用以上技術(shù)可以快速地對圖像像素應(yīng)用任何簡單的表達式??梢越Y(jié)合 point() 函數(shù)和 paste 函數(shù)修改圖像。

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

注意用于創(chuàng)建掩碼圖像的語法:

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

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

可以調(diào)整圖像對比度、亮度、色彩平衡、銳度等。

** 增強圖像 **

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

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

** 讀取序列 **

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

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

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

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

PIL庫包含一些函數(shù)用于將圖像、文本打印到Postscript打印機。以下是一個簡單的例子。

** 打印到Postscript **

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

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

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

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

如果從字符串數(shù)據(jù)中讀取圖像,使用StringIO類:

** 從字符串中讀取 **

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

** 從tar文檔中讀取 **

** 該小節(jié)不太理解,請參考原文 **

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

draft() 函數(shù)。

** Reading in draft mode **

輸出類似以下內(nèi)容:

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

Python2.7 教程 PIL

Python 之 使用 PIL 庫做圖像處理

來自

OpenCV Python實現(xiàn)旋轉(zhuǎn)矩形的裁剪

環(huán)境

矩形操作是我們在 OpenCV 里最常用的操作,其中最為常見的就是包圍框( Bounding Box )和旋轉(zhuǎn)矩形( Rotated Box )。 其中包圍框是最為常見的,對應(yīng) OpenCV 中的 boundingRect() ,使用正矩形框處物體,一般多用在目標檢測中。使用包圍框框柱目標物體,這種操作比較簡單,但是通??蛑幸矔幸恍┢渌膮^(qū)域。其次就是使用旋轉(zhuǎn)矩形,也叫最小外接矩形,對應(yīng) OpenCV 中的 minAreaRect() ,用來使用旋轉(zhuǎn)矩形最大限度的框出目標物體,減小背景干擾,在 OCR 任務(wù)中較為常用。

minAreaRect() 返回了所需區(qū)域的最小斜矩形的參數(shù),與包圍框直接返回四個頂點的坐標不同,最小外接矩形返回的是矩形的 ((x, y), (w, h), angle) ,對應(yīng)了矩形的中心,寬度,高度和旋轉(zhuǎn)角度。

旋轉(zhuǎn)角度 angle 是水平軸( x 軸)逆時針旋轉(zhuǎn),與碰到的矩形的第一條邊的夾角。并且這個邊的邊長是 width ,另一條邊邊長是 height 。也就是說,在這里 width 與 height 不是按照長短來定義的。

在 OpenCV 中,坐標系原點在左上角,相對于 x 軸,逆時針旋轉(zhuǎn)角度為負,順時針旋轉(zhuǎn)角度為正,所以函數(shù) minAreaRect() 返回的角度范圍時 [-90~0) 。想象一個平放的長矩形,調(diào)用 minAreaRect() 返回的角度為 -90 度。如果我們旋轉(zhuǎn)圖像,直到矩形樹立起來,這是調(diào)用 minAreaRect() 得到的角度依然是 -90 度。

第一種裁剪旋轉(zhuǎn)矩形的方法是通過仿射變換旋轉(zhuǎn)圖像的方式。

仿射變換( Affine Transformation ) 是一種二維坐標到二維坐標之間的線性變換,保持二維圖形的“平直性”( straightness ,即變換后直線還是直線不會打彎,圓弧還是圓弧)和“平行性”( parallelness ,其實是指保二維圖形間的相對位置關(guān)系不變,平行線還是平行線,相交直線的交角不變。)。

計算過程:

如果不做邊長和角度的判斷,則只會沿著 x 軸的順時針方向做相同大小角度的旋轉(zhuǎn),不能保證旋轉(zhuǎn)后的視角是正確的視角:

根據(jù)任務(wù)目標的類型,做邊長和角度的判斷并進行相應(yīng)的調(diào)整,可以保證旋轉(zhuǎn)后的視角是正確的視角:

第二種裁剪旋轉(zhuǎn)矩形的方法是通過透視變換直接將旋轉(zhuǎn)矩形的四個頂點映射到正矩形的四個頂點。

透視變換( Perspective Transformation )是將圖片投影到一個新的視平面( Viewing Plane ),也稱作投影映射( Projective Mapping )。

計算過程:

以上兩種方法都可以用來摳取旋轉(zhuǎn)矩形的內(nèi)容。仿射變換方法需要預(yù)先對整張圖進行旋轉(zhuǎn),通過觀察旋轉(zhuǎn)后的圖像可以發(fā)現(xiàn),有一部分圖像被旋轉(zhuǎn)出了圖像邊界,如果你要摳取的目標正好在圖像邊緣附近,那么很容易出界導(dǎo)致圖像摳取的缺失。同時我們需要對寬、高和角度做出動態(tài)的調(diào)整;透視變換的方法直接對摳取區(qū)域進行了映射,這種方法可以省略旋轉(zhuǎn)的步驟,并且不會出現(xiàn)摳取內(nèi)容的缺失。同時我們只需要對4個頂點之間的映射關(guān)系做好定義即可,不需要考慮角度的問題。相對的,透視變換相對于仿射變換計算量更大一些,不過這在 c++ 的底層實現(xiàn)上帶來的時延差距小于 ms 。

網(wǎng)頁標題:python圖像剪切函數(shù) python 剪切圖片
網(wǎng)頁路徑:http://muchs.cn/article8/doeiiop.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供標簽優(yōu)化域名注冊、企業(yè)網(wǎng)站制作網(wǎng)站內(nèi)鏈、面包屑導(dǎo)航移動網(wǎng)站建設(shè)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

營銷型網(wǎng)站建設(shè)