opencv學習(三)——繪圖功能


繪圖功能

我們將學習以下函數:cv.line(),cv.circle(),cv.rectangle(),cv.ellipse(),cv.putText()等。

在這些功能中,有一些相同的參數:

  • img:你要繪制形狀的圖像。
  • 形狀的顏色。對於BGR,將其作為元組傳遞,例如:(255,0,0)對於藍色。對於灰度,只需傳遞標量值即可。
  • thickness: 線或圓等的厚度。如果傳 -1 就是像圓的閉合圖形,它將填充形狀。默認 thickness = 1。
  • lineType:線條類型,如 8 連接線,抗鋸齒線等。默認情況下,是 8 連接線。cv.LINE_AA給出了抗鋸齒的線條,看起來非常適合曲線。

一、畫線

要繪制一條線,需要傳遞線的開始和結束坐標。我們將創建一個黑色圖像,並從左上角到右下角在其上繪制一條藍線。

import cv2 
import numpy as np

def cv_show(name, img):
    cv2.imshow(name, img)
    cv2.waitKey(0)
    cv2.destroyAllWindows()
    
#創建黑色的圖像
img = np.zeros((512, 512, 3), np.uint8)
#繪制一條厚度為5的藍色對角線
line = cv2.line(img, (0, 0), (511, 511), (255, 0, 0), 5)
cv_show('line', line)

image

二、畫矩形

要繪制矩形,需要矩形的左上角和右下角。這次,我們將在圖像的右上角繪制一個綠色矩形。

rectangle = cv2.rectangle(img, (384, 0), (510, 128), (0, 255, 0), 3)
cv_show('rectangle', rectangle)

image

三、畫圓圈

要繪制一個圓,需要其中心坐標和半徑。我們將在上面繪制的矩形內繪制一個圓。

circle = cv2.circle(img, (447, 63), 63, (0, 0, 255), -1)
cv_show('circle', circle)

image

四、畫橢圓

要繪制橢圓,我們需要傳遞幾個參數。一個參數是中心位置(x,y)。第二個參數是軸長度(長軸長度,短軸長度)。angle是橢圓沿逆時針方向旋轉的角度。startAngle和endAngle表示從主軸沿順時針方向測量的橢圓弧的開始和結束。如整圓就傳 0 和 360。

elipse = cv2.ellipse(img, (256, 256), (100, 50), 0, 0, 180, (15, 255, 212), -1)
cv_show('elipse', elipse)

image

五、畫多邊形

要繪制多邊形,首先需要頂點的坐標。將這些點組成形狀為 ROWSx1x2 的數組,其中 ROWS 是頂點數,並且其類型應為int32。在這里,我們繪制了一個帶有四個頂點的黃色小多邊形。

pts = np.array([
    [10, 5],
    [20, 30],
    [70, 20],
    [50, 10]
], np.int32)
pts = pts.reshape((4, 1, 2))
polylines = cv2.polylines(img, [pts], True, (0, 255, 255))
cv_show('polylines', polylines)

如果第三個參數為False,您將獲得一條連接所有點的折線,而不是閉合形狀。cv.polylines()可用於繪制多條線。只需創建要繪制的所有線條的列表,然后將其傳遞給函數即可。所有線條將單獨繪制。與為每條線調用cv.line相比,繪制一組線是一種更好,更快的方法。

六、向圖像添加文本

在圖像上加文字,你需要指定以下內容。

  • 你想寫的文字數據。
  • 你想寫的位置坐標 (如 左下角開始)。
  • 字體類型。
  • 常規的如顏色,粗細,線型等。為了更好看,線型使用 lintType = cv.LINE_AA。

我們將在圖像上寫一個白色的 ”OpenCV“。

font = cv2.FONT_HERSHEY_SIMPLEX
text = cv2.putText(img, 'OpenCV', (10, 500), font, 4, (255, 255, 255), 2, cv2.LINE_AA)
cv_show('text', text)

image

import cv2 
import numpy as np

def cv_show(name, img):
    cv2.imshow(name, img)
    cv2.waitKey(0)
    cv2.destroyAllWindows()
    
#創建黑色背景
background = np.zeros((512, 512, 3), np.uint8)

#畫紅圓
red_circle = cv2.circle(background, (256, 122), 50, (0, 0, 255), 40)
cv_show('red_circle', red_circle)

#畫綠圓
green_circle = cv2.circle(background, (172, 282), 50, (0, 255, 0), 40)
cv_show('green_circle', green_circle)

#畫藍圓
blue_circle = cv2.circle(background, (342, 282), 50, (255, 0, 0), 40)
cv_show('blue_circle', blue_circle)

#畫線(三角形)
pts1 = np.array([
    [256, 122],
    [202, 202],
    [312, 202]
], np.int32)
pts1.reshape((3, 1, 2))
pts2 = np.array([
    [162, 282],
    [196, 202],
    [270, 278]
], np.int32)
pts2.reshape((3, 1, 2))
pts3 = np.array([
    [352, 282],
    [292, 202],
    [402, 202]
], np.int32)
pts3.reshape((3, 1, 2))
fillline = cv2.fillPoly(background, [pts1, pts2, pts3], (0, 0, 0))
cv_show('fillline', fillline)

image


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM