目次
パラメータの説明
形状を描画するための関数には、いくつかの一般的なパラメーターがあります。
- img:描かれる形の絵
- 色:描画する色
- カラー画像は、青が(255,0,0)などのBGR値のセットに渡されます。
- グレースケール画像、グレースケール値を渡すだけ
- 太さ:線幅、デフォルトは1です。長方形/円などの閉じた形状の場合は、-1を渡して塗りつぶされた形状を示します。
- lineType:線種、3つのパラメーターはオプションですcv2.LINE_4、cv2.LINE_8、cv2.LINE_AA
1.線を引く
cv2.line(img、ps、pe、color、thickness、lineType、shift)
ps:直線の始点。これは(X、Y)と同様の座標点であることに注意してください。pe:上記と同じ直線の終点。
2.長方形
cv2.rectangle(img、ps、pe、color、thickness、lineType、shift)
ps:長方形の左上隅の座標、pe:長方形の右下隅の座標、shift:座標点の小数点以下の桁数
3.サークル
cv2.circle(img、center、radius、color、thickness、lineType、shift)
中心:中心座標、半径:円の半径値、シフト:中心座標と半径の小数点以下の桁数
4.楕円
cv2.ellipse(img、center、axes、rotateAngle、startAngle、endAngle、color、thickness、lineType、shift)
center:楕円の中心の座標、これは座標値であることに注意してください。axes:楕円の長軸と短軸の長さ、これは情報のタプルです。
rotateAngle:回転する楕円の角度、startAngle:楕円弧の開始角度、endAngle:楕円弧の終了角度
OpenCVの原点は左上隅にあるため、ここでの角度は時計回りに計算されます
5.ポリゴン
cv2.polylines(img、pts、isClosed、color、thickness、lineType、shift)
pts:ポリゴンの両側にある座標点のリスト。これはnumpy配列タイプです。
isClosed:値はTrueまたはFalseです。Trueの場合は閉じたポリゴンを意味し、Falseの場合は閉じません。
ポリゴンを描画するには、最初に頂点の座標が必要です。これらのポイントを形状のROWSx1x2
配列にグループ化します。ここROWS
で、は頂点の数であり、そのタイプはint32である必要があります。ここでは、4つの頂点を持つ小さな黄色のポリゴンを描画しました。
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))
複数の線を描画する必要がある場合は、cv2.polylines()を使用する方がcv2.line()よりもはるかに効率的です。次に例を示します。
# 使用cv2.polylines()画多条直线
line1 = np.array([[100, 20], [300, 20]], np.int32).reshape((-1, 1, 2))
line2 = np.array([[100, 60], [300, 60]], np.int32).reshape((-1, 1, 2))
line3 = np.array([[100, 100], [300, 100]], np.int32).reshape((-1, 1, 2))
cv2.polylines(img, [line1, line2, line3], True, (0, 255, 255))
6.テキストまたは長方形にテキストを追加します
cv2.putText(img、text、org、fontFace、fontScale、color、thickness、lineType、bottomLeftOrigin)
text:テキストコンテンツ、org:画像内のテキストの左下隅の座標
fontFace:フォントタイプ、オプションのパラメータは次のとおりです
FONT_HERSHEY_SIMPLEX、FONT_HERSHEY_PLAIN、FONT_HERSHEY_DUPLEX、FONT_HERSHEY_COMPLEX、FONT_HERSHEY_TRIPLEX、FONT_HERSHEY_COMPLEX_SMALL、FONT_HERSHEY_SCRIPT_SIMPLEX、またはFONT_HERSHEY_SC
fontScale:スケーリング比。値にプログラムフォントのデフォルトサイズを掛けて、フォントサイズを取得します。
bottomLeftOrigin:デフォルトはtrueです。これは、画像データの原点が左下隅にあることを意味します。Falseの場合、画像データの原点が左上隅にあることを意味します。
import cv2 as cv
import numpy as np
img=np.zeros([512,512,3],np.uint8) ##创建一副黑色的图片
"""画线"""
cv.line(img,(0,32),(512,89),(255,0,0),3,cv.LINE_8)
"""画矩阵"""
tangle=cv.rectangle(img, (84, 45), (210, 228), (0, 255, 0), 3,cv.LINE_4)
"""画圆"""
cv.circle(img, (447, 63), 63, (0, 0, 255), -1)
"""画椭圆"""
cv.ellipse(img, (256, 256), (100, 50), 90, 0, 360, (255, 0, 0), 2)
"""画多边形"""
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))
"""在图片上加文字"""
font = cv.FONT_HERSHEY_SIMPLEX
cv.putText(img,'OpenCV',(10,500), font, 2,( 0,255,0),2,cv.LINE_AA)
"""矩形框上加文字"""
cv.putText(tangle,'OpenCV',(84, 40), font, 0.5,( 0,255,0),1,cv.LINE_AA)
"""使用cv.polylines()画多条直线"""
line1 = np.array([[100, 20], [300, 20]], np.int32).reshape((-1, 1, 2))
line2 = np.array([[100, 60], [300, 60]], np.int32).reshape((-1, 1, 2))
line3 = np.array([[100, 100], [300, 100]], np.int32).reshape((-1, 1, 2))
cv.polylines(img, [line1, line2, line3], True, (0, 255, 255))
cv.imshow('img',img)
cv.waitKey(0)
cv.destroyAllWindows()