cv2.line(),cv2.rectangle(),cv2.circle(),cv2.ellipse(),cv2.polylines()
目標(biāo)
·學(xué)會使用open cv繪制幾何形狀學(xué)會使用函數(shù)
·cv2.line()动漾,cv2.circle()赤套,cv2.rectangle渠脉,cv2.ellipse()等代碼在以上的所有函數(shù)中存皂,你將會看到一些相同的參數(shù):
·img:就是繪制的形狀所在的圖像
·color:就是繪制形狀所用的顏色,對于BGR通道程奠,傳遞一個元組(B,G,R)败京。對于灰度圖。只要傳遞一個灰度值
·thickness:線條或者圓圈的厚度梦染。如果封閉的圖形并且該值是-1的話赡麦,形狀的內(nèi)部會被填充。default thickness=1
·lineType:線條的形狀帕识,八連通直線泛粹,反走樣直線(比像素點直線平滑)等。默認(rèn)值是八連通直線肮疗,cv2.LINE_AA給出的是反走樣直線晶姊,因為反走樣直線的算法,使得它不是單純使用像素值繪制伪货,因而顯得平滑们衙。有兩篇文章解答了我對八連接直線和反走樣直線的問題:
https://blog.csdn.net/jssyy123/article/details/42007565(反走樣直線)
https://blog.csdn.net/Young__Fan/article/details/82696276(八連通直線)
繪制直線
給定初始和結(jié)尾的坐標(biāo)值。
import numpy as np
import cv2
img = np.zeros((512,512,3), np.uint8)
#img為一個純黑色的背景
img = cv2.line(img,(0,0),(511,511),(255,0,0),5)
畫一個矩形
給出左上角和右下角的坐標(biāo)值碱呼。
img = cv2.rectangle(img,(384,0),(510,128),(0,255,0),3)
畫圓
圓心坐標(biāo)和半徑
img = cv2.circle(img,(447,63), 63, (0,0,255), -1)
畫橢圓
要繪制一個橢圓蒙挑,我們需要傳遞幾個參數(shù),一個是橢圓的中心點坐標(biāo)愚臀。下一個是軸長度(第一主軸和第二主軸)忆蚀,angle是繪制橢圓的完整程度,從startangle開始逆時針旋轉(zhuǎn)到endangle。例如給startangle賦值0馋袜,endangle賦值360就是一整個橢圓男旗。下面是函數(shù)的參數(shù):
def ellipse(img, center, axes, angle, startAngle, endAngle, color, thickness=None, lineType=None, shift=None). ?
·?? @param img Image.???
. ??@param center Center of the ellipse.???
. ??@param axes Half of the size of the ellipse main axes.???
. ??@param angle Ellipse rotation angle in degrees.???
. ??@param startAngle Starting angle of the elliptic arc in degrees.
. ??@param endAngle Ending angle of the elliptic arc in degrees.???
. ??@param color Ellipse color.???
. ??@param thickness Thickness of the ellipse arc outline, if positive. Otherwise, this indicates that????. ??a filled ellipse sector is to be drawn.???
. ??@param lineType Type of the ellipse boundary. See #LineTypes
. ??@param shift Number of fractional bits in the coordinates of the center and values of axes.
分別是:第一個是中心點的坐標(biāo),一個元組欣鳖;第二個兩條半主軸的長度察皇,也就是橢圓方程里面的長半軸與短半軸,也是一個元組泽台。第三個是橢圓相對于水平旋轉(zhuǎn)的角度让网,逆時針方向旋轉(zhuǎn)。第四個參數(shù)和第五個參數(shù)一起使用师痕,第四個參數(shù)是橢圓開始的角度(與水平的夾角),第五個是橢圓結(jié)束的角度(與水平的角度)而账。兩個參數(shù)表示了能顯示的橢圓的部分胰坟;比如0,180代表顯示一半的橢圓,因為整個橢圓的角度是360泞辐。第六個是線條的顏色笔横,可以是長為三的元組,代表BGR顏色咐吼,也可以是一個數(shù)字吹缔,代表顏色的深度(在這個數(shù)字為255的時候是純藍(lán)色,為0的時候是黑色)锯茄。第七個參數(shù)是線條的寬度厢塘,如果是負(fù)數(shù)就代表要完全填充所畫的圖形。第八個參數(shù)是線條類型肌幽,有八連通線條晚碾,反走樣線條(其他的我就不知道了)。第九個是浮點數(shù)的精度喂急,就是中心點的坐標(biāo)和主軸長度的精度格嘁。
繪制多邊形
首先要全部給出點的坐標(biāo),但是這些點的坐標(biāo)又必須轉(zhuǎn)化為一個RAWSx1x2的數(shù)組廊移,也就是行數(shù)可以改變糕簿,但是其他兩個維度必須是1和2的三維數(shù)組,并且是numpy中的有符號的32位數(shù)狡孔。
def polylines(img, pts, isClosed, color, thickness=None, lineType=None, shift=None)
. ??@param img Image.???
. ??@param pts Array of polygonal curves.???
. ??@param isClosed Flag indicating whether the drawn polylines are closed or not. If they are closed,???
. ??the function draws a line from the last vertex of each curve to its first vertex.???
. ??@param color Polyline color.???
. ??@param thickness Thickness of the polyline edges.???
. ??@param lineType Type of the line segments. See #LineTypes???
. ??@param shift Number of fractional bits in the vertex coordinates.
pts = np.array([[10,5],[20,30],[70,20],[50,10]], np.int32)
pts = pts.reshape((-1,1,2))
#因為數(shù)組的轉(zhuǎn)化是相對應(yīng)的懂诗,元素的個數(shù)不會減少,因此使用-1來代表第一個維度是不確定的苗膝,numpy會自動計算一維的值
img = cv2.polylines(img,[pts],True,(0,255,255))
畫多邊形除了注意坐標(biāo)點轉(zhuǎn)化為一個三維矩陣之外還需要注意個布爾參數(shù)i是isClosed响禽。決定了多邊形是否閉合