基于Python的Opencv入門教程(P3.讓我們?nèi)〕鑫覀冃枰牟糠郑?/h1>
書接上回(doge)
陣列切片和裁剪
提取“感興趣區(qū)域”是圖像處理的一項重要技術(shù)。
比如說,你正在努力識別電影中的人臉。首先,您需要運行一個人臉檢測算法,以找到您正在處理的所有幀中的人臉坐標(biāo)。然后,您需要提取人臉并保存或處理它們。在羞羞的鐵拳找到所有包含副掌門(沈騰)的照片將是一個很好的人臉識別小項目。
現(xiàn)在,讓我們手動提取一個副掌門(沈騰)。這可以通過陣列切片來實現(xiàn)。

OpenCV陣列切片允許我們輕松提取感興趣區(qū)域(副掌門)
陣列切片顯示在第20行,格式為:image[開始Y:結(jié)束Y,開始X:結(jié)束X]。這段代碼獲取一個副掌門,然后顯示在第21行。就像上次一樣,我們一直顯示直到按下一個鍵(第26行)。
如圖3所示,我們提取了沈騰的臉。在這個例子中,我實際上使用Photoshop預(yù)先確定了(x,y)坐標(biāo)。
調(diào)整圖像大小
調(diào)整圖像大小很重要,原因有很多。首先,您可能需要調(diào)整大圖像的大小以適應(yīng)屏幕。對于較小的圖像,圖像處理速度也更快,因為要處理的像素更少。在深度學(xué)習(xí)的情況下,我們通常會調(diào)整圖像大小,忽略縱橫比,以便體積適合網(wǎng)絡(luò),而網(wǎng)絡(luò)要求圖像為正方形且具有一定的尺寸。
讓我們將原始圖像調(diào)整為200 x 200像素:
在第23行,我們忽略縱橫比調(diào)整了圖像的大小。窗口Fixed Resizing顯示圖像已調(diào)整大小,但由于未考慮縱橫比,圖像現(xiàn)在已扭曲。

讓我們計算原始圖像的縱橫比,并使用它來調(diào)整圖像大小,使其不會出現(xiàn)擠壓和扭曲:
回想一下這個腳本的第9行,在那里我們提取了圖像的寬度和高度。
假設(shè)我們要將600像素寬的圖像調(diào)整為300像素寬,同時保持縱橫比。
在第31行,我們計算新寬度與舊寬度的比率。
從那里,我們指定了新圖像的尺寸dim。我們知道我們想要一幅300像素寬的圖像,但我們必須用h乘以r(分別是原始高度和我們的比率)來計算高度。
將dim(我們的尺寸)輸入CV2。resize函數(shù),我們現(xiàn)在獲得了一個名為resized的新圖像,它沒有失真(第32行)。
為了檢查我們的工作,我們使用第33行的代碼顯示圖像:

但是我們能讓在調(diào)整尺寸時保持縱橫比的過程變得更容易嗎?
當(dāng)然可以呀!
每次要調(diào)整圖像大小時,計算縱橫比都有點繁瑣,因此我將代碼包裝在imutils中的一個函數(shù)中。
以下是如何使用imutils。調(diào)整大小:
在一行代碼中,我們保留了縱橫比并調(diào)整了圖像的大小。
簡單對吧?
您只需要提供目標(biāo)寬度或目標(biāo)高度作為關(guān)鍵字參數(shù)(第43行)。
結(jié)果如下:
