基于Python的Opencv入門教程(P5.讓我們?cè)趫D片上畫畫)
書接上文(doge)
在本節(jié)中,我們將在輸入圖像上繪制矩形、圓形和直線。我們還將在圖像上覆蓋文本。
在繼續(xù)使用OpenCV在圖像上繪制之前,請(qǐng)注意圖像上的繪制操作是在適當(dāng)?shù)奈恢脠?zhí)行的。因此,在每個(gè)代碼塊的開頭,我們制作一個(gè)原始圖像的副本,將副本存儲(chǔ)為輸出。然后我們繼續(xù)繪制名為“輸出到位”的圖像,這樣我們就不會(huì)破壞原始圖像。
那讓我們開始吧!
框出
讓我們圍繞掌門的臉畫一個(gè)矩形:
首先,出于剛才解釋的原因,我們?cè)诘?5行復(fù)制了一份圖像。
然后我們繼續(xù)畫矩形。
在OpenCV中繪制矩形再簡(jiǎn)單不過了。使用預(yù)先計(jì)算的坐標(biāo),我為CV2提供了以下參數(shù)。第66行的矩形函數(shù):
img:要繪制的目標(biāo)圖像。我們將他繪制在我們所要輸出的圖片上。
pt1:我們的起始像素坐標(biāo)是左上角。在我們的例子中,左上角是(430, 40)。
pt2:結(jié)束像素-右下角。右下像素位于(800, 450)。
顏色:BGR元組。為了表示紅色,我提供了(0,025)。
厚度:線條厚度(負(fù)值將形成實(shí)心矩形)。我已經(jīng)提供了2的厚度。
因?yàn)槲覀兪褂玫氖荗penCV的函數(shù)而不是NumPy操作,所以我們可以按(x,y)順序而不是(y,x)順序提供坐標(biāo),因?yàn)槲覀儧]有直接操作或訪問NumPy數(shù)組-OpenCV為我們處理這些。
程序運(yùn)行的結(jié)果如下圖所示???

現(xiàn)在讓我們?cè)谡崎T的臉前畫一個(gè)藍(lán)色的圓圈:
要繪制圓,需要向CV2提供以下參數(shù)。圓圈:
img:輸出圖像。
center:圓的中心坐標(biāo)。我提供的(615, 245)就在掌門的臉上。
radius:以像素為單位的圓半徑。我提供了一個(gè)20像素的值。
color:圓形顏色。這一次我使用了藍(lán)色,在BGR元組的B和G+R組件中分別用255和0表示(255,0,0)。
厚度:線條的厚度。因?yàn)槲姨峁┝艘粋€(gè)負(fù)值(-1),所以圓是實(shí)心的/被填充的。
程序運(yùn)行的結(jié)果如下圖所示???

讓我們繼續(xù)吧!
接下來,我們將畫一條紅線。這條線穿過掌門的頭,穿過他的臉,到達(dá)他的手。
如果仔細(xì)查看方法參數(shù)并將其與矩形參數(shù)進(jìn)行比較,您會(huì)注意到它們是相同的:
就像在矩形中一樣,我們提供兩個(gè)點(diǎn)、一種顏色和一條線的厚度。OpenCV的后端完成了其余的工作。
圖13顯示了代碼塊第78行的結(jié)果:

通常,您會(huì)發(fā)現(xiàn),為了顯示的目的,您需要在圖像上覆蓋文本。如果你在做人臉識(shí)別的工作,你可能會(huì)想把這個(gè)人的名字畫在他們的臉上?;蛘?,如果你在計(jì)算機(jī)視覺職業(yè)上取得了進(jìn)步,你可以建立一個(gè)圖像分類器或物體檢測(cè)器。在這些情況下,您會(huì)發(fā)現(xiàn)您想要繪制包含類名和概率的文本。
讓我們看看OpenCV的putText函數(shù)是如何工作的:
OpenCV的putText函數(shù)負(fù)責(zé)在圖像上繪制文本。讓我們看看所需的參數(shù):
img:輸出圖像。
text:我們要在圖像上寫入/繪制的文本字符串。
pt:文本的起點(diǎn)。
font:我經(jīng)常使用CV2。FONT\u HERSHEY\u SIMPLEX。這里列出了可用的字體。
scale:字體大小倍增。
color:文本顏色。
thickness:筆劃的厚度(以像素為單位)。
第84行和第85行的代碼將繪制文本“OpenCV+Jurassic Park?。?!”在下圖的輸出圖像上顯示綠色:

運(yùn)行第一個(gè)OpenCV教程Python腳本
在我的文章中,我通常會(huì)提供一個(gè)部分,詳細(xì)說明如何在計(jì)算機(jī)上運(yùn)行代碼。在這篇博文中,我做了以下假設(shè):
您已經(jīng)從這篇博文的“下載”部分下載了代碼。
您已經(jīng)在系統(tǒng)上安裝了OpenCV和imutils庫。
要執(zhí)行我們的第一個(gè)腳本,請(qǐng)打開一個(gè)終端或命令窗口(這里也可以用Pycharm自帶的那個(gè)終端),并導(dǎo)航到文件或在必要時(shí)提取它們。
在此輸入以下命令:
以下是終端的反饋:

命令位于bash提示符$character之后。只需在您的終端輸入python opencv_tutorial_01.py,然后第一個(gè)圖像將出現(xiàn)。
要循環(huán)完成我們剛剛學(xué)習(xí)的每個(gè)步驟,請(qǐng)確保圖像窗口處于活動(dòng)狀態(tài),然后按任意鍵。
上面的前兩個(gè)代碼塊告訴Python在終端中打印信息。如果您的終端可見,您將看到終端輸出(如上圖)。

那么我們教程的第一大部分就講完了。
這是我這個(gè)前面一直以游戲?yàn)橹鞯膗p的第一次嘗試,如果文章有錯(cuò)誤以及難懂的地方,歡迎反饋!