1. 程式人生 > >【翻譯】OpenCV裡的畫圖方法

【翻譯】OpenCV裡的畫圖方法

⚠️這個系列是自己瞎翻的,文法很醜,跳著跳著撿重要的部分翻,翻錯了不負責,就這樣。

⚠️基於3.4.3,Drawing Functions in OpenCV,原文

 

目標 

程式碼 

在剛才提到的所有方法裡,你會看到一些如下給出的公共的引數:

  • 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)

結果

然後,是時候看看我們畫圖的最終結果啦。用你之前章節學到的,把圖形展示出來看看。

drawing_result.jpg

 

額外資源

  1. 在 ellipse 方法中用到的角度,不是我們常說的圓角度。詳情,看這個討論

練習 

  1. 試著用可用的畫圖方法把OpenCV的logo畫出來。

上篇:【翻譯】OpenCV-Python教程(視訊入門)

下篇:【翻譯】把滑鼠當做一個畫筆