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

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

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

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