【翻譯】OpenCV裡的畫圖方法
阿新 • • 發佈:2018-12-02
⚠️這個系列是自己瞎翻的,文法很醜,跳著跳著撿重要的部分翻,翻錯了不負責,就這樣。
⚠️基於3.4.3,Drawing Functions in OpenCV,附原文。
目標
- 學會用OpenCV畫出不同的幾何圖形
- 你會學到如下方法 : cv.line(), cv.circle() , cv.rectangle(), cv.ellipse(), cv.putText() 等等.
程式碼
在剛才提到的所有方法裡,你會看到一些如下給出的公共的引數:
- img : 你想要畫出圖形在哪個image上
- color : 圖形的BGR顏色,用一個元組來傳這個引數,例如:(255,0,0)表示藍色。如果要灰度,則傳入一個量標。
- thickness : 線或者圓的粗細,如果傳入對於一個封閉的輪廓,比如圓形,傳入**-1**那麼它會被填滿。預設的粗細為1。
- lineType : 線型,要麼是八連通的,要麼是抗鋸齒的。預設是八連通的。cv.LINE_AA 使得抗鋸齒線條看起來更有弧度。(譯者注:請大家自行百度關鍵詞8-connected / anti-aliased)
畫一條線
要畫出一條線,你需要傳入這條線的起止點座標。我們要先建立一個全黑的image,然後從左上角往右下角畫條藍色的線。
import numpy as np
import cv2 as cv
# Create a black image
img = np.zeros((512,512,3), np.uint8)
# Draw a diagonal blue line with thickness of 5 px
cv.line(img,(0,0),(511,511),(255,0,0),5)
畫矩形
要畫一個矩形,你需要左上角和右下角的點,這次我們要在右上角畫一個綠色的矩形。
cv.rectangle(img,(384,0),(510,128),(0,255,0),3)
畫圓圈
畫圓圈,你需要它的中點座標和半徑。我們要在剛才畫好的矩形裡再畫一個圓。
cv.circle(img,(447,63), 63, (0,0,255), -1)
畫橢圓
要畫橢圓我們需要傳入好幾個引數。第一個引數是中點 (x,y)。接下來是主軸和次軸的軸長。引數angle則表示橢圓(主軸)逆時針方向轉動的角度。startAngle 和 endAngle 兩個引數指示出了從主軸開始以順時針方向衡量的起止弧度。比如,傳入0和360就會得到一個完整的橢圓。想要更多資訊,檢視 cv.ellipse() 方法的文件。如下示例在image正中間畫出一個半邊橢圓。
cv.ellipse(img,(256,256),(100,50),0,0,180,255,-1)
畫多邊形
要畫一個多邊形,首先你需要一堆頂點的座標。把這些點弄成一個ROWSx1x2的陣列。ROWS表示頂點的數量,它得是一個int32型的整數。接下來咱們畫一個小的黃色四邊形。
pts = np.array([[10,5],[20,30],[70,20],[50,10]], np.int32)
pts = pts.reshape((-1,1,2))
cv.polylines(img,[pts],True,(0,255,255))
提示
如果第三引數為False,你會得到一段穿過所有點的多段折線(polylines),而非一個封閉的圖形。
cv.polylines() 此方法可以被用於畫多段線。只要建立你想要畫線條的list丟進方法裡就可以了,在要畫一堆線條的時候,它比挨個呼叫 cv.line() 要快要好。
影象上新增文字
想要在影象上新增文字,你需要指定以下幾點:
- 你要寫上的文字
- 你要放置文字的位置座標 (比如,資料起於坐下角)
- 字型 (檢視 cv.putText() 文件瞭解支援的字型)
- 字型比例 (指定字型大小)
- 通常的引數比如顏色,粗細,線型,等等。為了更好看,推薦cv.LINE_AA。
我們要在影象上寫上白色的OpenCV。
font = cv.FONT_HERSHEY_SIMPLEX
cv.putText(img,'OpenCV',(10,500), font, 4,(255,255,255),2,cv.LINE_AA)
結果
然後,是時候看看我們畫圖的最終結果啦。用你之前章節學到的,把圖形展示出來看看。
額外資源
- 在 ellipse 方法中用到的角度,不是我們常說的圓角度。詳情,看這個討論。
練習
- 試著用可用的畫圖方法把OpenCV的logo畫出來。