https://docs.opencv.org/4.2.0/dc/da5/tutorial_py_drawing_functions.html
目標(biāo)
- 學(xué)習(xí)使用OpenCV繪制不同的幾何形狀
- 您將學(xué)習(xí)以下功能:cv.line(), cv.circle() , cv.rectangle(), cv.ellipse(), cv.putText()
等草则。
編寫代碼
在上述所有功能中钢拧,您將看到一些常見的參數(shù),如下所示:
- img:您要繪制形狀的圖像
- color:形狀的顏色炕横。對(duì)于BGR源内,將其作為元組傳遞,例如:(255,0,0)表示藍(lán)色份殿。對(duì)于灰度值膜钓,只需傳遞標(biāo)量數(shù)值即可。
- 厚度:線或圓等的粗細(xì)卿嘲。如果對(duì)封閉的圖形(如圓)傳遞-1颂斜,它將填充形狀。默認(rèn)厚度= 1
- lineType:線的類型拾枣,是否為8連接線沃疮,抗鋸齒線等。默認(rèn)情況下梅肤,為8連接線司蔬。 cv.LINE_AA給出了抗鋸齒的線條,看起來(lái)非常適合曲線姨蝴。
畫線
要繪制一條直線俊啼,您需要傳遞直線的起點(diǎn)和終點(diǎn)。我們將創(chuàng)建一個(gè)黑色圖像似扔,并從左上角到右下角在其上繪制一條藍(lán)線吨些。
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)
畫矩形
要繪制矩形搓谆,您需要矩形的左上角和右下角。這次豪墅,我們將在圖像的右上角繪制一個(gè)綠色矩形泉手。
cv.rectangle(img,(384,0),(510,128),(0,255,0),3)
畫圓
要畫一個(gè)圓,需要其中心坐標(biāo)和半徑偶器。我們將在上面繪制的矩形內(nèi)繪制一個(gè)圓斩萌。
cv.circle(img,(447,63), 63, (0,0,255), -1)
畫橢圓
要繪制橢圓,我們需要傳遞幾個(gè)參數(shù)屏轰。一個(gè)參數(shù)是中心位置(x颊郎,y)。下一個(gè)參數(shù)是軸長(zhǎng)度(長(zhǎng)軸長(zhǎng)度霎苗,短軸長(zhǎng)度)姆吭。angle是橢圓沿逆時(shí)針?lè)较蛐D(zhuǎn)的角度。startAngle和endAngle表示從主軸沿順時(shí)針?lè)较驕y(cè)量的橢圓弧的開始和結(jié)束唁盏。例如:給定值0和360會(huì)畫出完整的橢圓内狸。有關(guān)更多詳細(xì)信息,請(qǐng)參閱cv.ellipse()的文檔厘擂。下面的示例在圖像的中心繪制一個(gè)橢圓形昆淡。
cv.ellipse(img,(256,256),(100,50),0,0,180,255,-1)
畫多邊形
要繪制多邊形,首先需要頂點(diǎn)的坐標(biāo)刽严。將這些點(diǎn)組成形狀為ROWSx1x2
的數(shù)組昂灵,其中ROWS是頂點(diǎn)數(shù),并且其類型應(yīng)為int32舞萄。在這里眨补,我們用黃色繪制了一個(gè)帶有四個(gè)頂點(diǎn)的小多邊形。
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))
注意
如果第三個(gè)參數(shù)為False鹏氧,您將獲得一條連接所有點(diǎn)的折線渤涌,而不是閉合形狀。
cv.polylines()
可用于繪制多條線把还。只需創(chuàng)建要繪制的所有線條的列表实蓬,然后將其傳遞給函數(shù)即可。所有線條將單獨(dú)繪制吊履。與為每條線調(diào)用cv.line()
相比安皱,繪制一組線是一種更好,更快的方法艇炎。
向圖像添加文本:
要將文本放入圖像中酌伊,需要指定以下內(nèi)容。
- 您要寫入的文字?jǐn)?shù)據(jù)
- 您要放置它的位置坐標(biāo)(即數(shù)據(jù)開始的左下角)。
- 字體類型(查看 cv.putText() 文檔以獲取受支持的字體)
- 字體比例(指定字體大芯幼)
- 常規(guī)的內(nèi)容虹脯,例如顏色,厚度奏候,lineType等循集。為了獲得更好的外觀,建議使用lineType = cv.LINE_AA蔗草。
我們將在白色圖像上寫入OpenCV咒彤。
font = cv.FONT_HERSHEY_SIMPLEX
cv.putText(img,'OpenCV',(10,500), font, 4,(255,255,255),2,cv.LINE_AA)
結(jié)果
現(xiàn)在是時(shí)候查看我們繪圖的最終結(jié)果了。正如您在以前的文章中學(xué)習(xí)的那樣咒精,顯示圖像以查看它镶柱。
其他資源
- 橢圓函數(shù)中使用的角度不是我們的圓角。有關(guān)更多詳細(xì)信息模叙,請(qǐng)?jiān)L問(wèn)此討論歇拆。
練習(xí)題
- 嘗試使用OpenCV中可用的繪圖功能,來(lái)創(chuàng)建OpenCV的徽標(biāo)范咨。