cv2.line(入力画像, pt1, pt2, color, thickness, lineType, shift)
線を描画するクラス関数。
引数は以下の通り。
| 入力画像(必須) | 入力画像データ |
| pt1(必須) | 線の始点の座標 |
| pt2(必須) | 線の終点の座標 |
| color(必須) | 線の色 |
| thickness(任意) | 線の太さ(整数のみ、実数は不可、デフォルトは"1") |
| lineType(任意) | 線の種類(デフォルトはcv.2LINE_8) |
| shift(任意) | 座標の小数ビット数(デフォルトは"0") |
以下にプログラムの実行例を示す。
#!/usr/bin/python
import cv2
img = cv2.imread("neko.jpeg")
cv2.line(img, (0,0), (200,200), (0,0,255), 1, cv2.LINE_AA)
cv2.imshow("neko", img)
cv2.waitKey(0)
実行結果

(0,0)から(200,200)にかけてR=255の線が引かれたのが分かる。
lineTypeにcv2.LINE_AAを入れるとアンチエイリアスされた画像が出力される。
線のギザギザが滑らかになるので、原則こちらを用いる。
cv2.rectangle(入力画像, pt1, pt2, color, thickness, lineType, shift)
四角形を描画するクラス関数。
引数についてはline関数と同様。
以下の命令を先ほどのプログラムの7行目に差し替えると...
cv2.rectangle(img, (10,10), (100,150), (0,0,255), cv2.FILLED, cv2.LINE_AA)
実行結果

(10,10)を左上、(100,150)を右下とした長方形が描画される。
thicknessにcv2.FILLEDを入れると図形が塗りつぶされる。
"-1"を入れることでも可能。
cv2.circle(入力画像, center, radius, color, thickness, lineType, shift)
円を描画するクラス関数。
引数は以下の通り。
既出のものは以後省略。
| center(必須) | 円の中心の座標。(x座標, y座標)の並びのタプル。 |
| radius(必須) | 円の半径 |
プログラム例
cv2.circle(img, (100,100), 40, (255,0,0), 2)
実行結果

(100,100)中心とした半径40、B=255、太さ2の円が描画される。
なお、太さは画素数を表しているわけではなく、かなり極端に変化する。
ここらへんの仕様はクソ(矢野先生談)なので、諦める他ない。
rectangle関数と同様に、太さを-1にすることで塗りつぶすことも可能。
cv2.drawMarker(img, coor, color, markerType, markerSize)
マーカーを描画するクラス関数。
引数は以下の通り。
| coor(必須) | 中心の座標(x,y) |
| markerType(任意) | マークのタイプ(デフォルトはcv2.MERKER_CROSS) |
| markerSize(任意) | マークの大きさ(デフォルトは"20") |
markerTypeには以下のようなものがある。
| + | cv2.MARKER_CROSS(デフォルト) |
| * | cv2.MARKER_TILTED_CROSS |
| ☆ | cv2.MARKER_STAR |
| ◇ | cv2.MARKER_DIAMOND |
| □ | cv2.MARKER_SQUARE |
| △ | cv2.MARKER_TRIANGLE_UP |
| ▽ | cv2.MARKER_TRIANGLE_DOWN |
プログラム例
cv2.drawMarker(img, (100,100), (0,0,0), cv2.MARKER_STAR, 100)
実行結果

(100,100)を中心としたR,G,B=0(黒)、サイズ100の星型マーカーが描画される。
こちらのサイズはきっちりと画素数に合わせたものになる。
cv2.putText(入力画像, text, org, fontFace, fontScale, color, thickness, lineType, bottomLeftOrigin)
テキストを描画するクラス関数。
日本語は出力不可。
引数は以下の通り。
| text(必須) | 描画するテキスト |
| org(必須) | テキストの左下の座標。(x座標, y座標)の並びのタプル |
| fontFace(必須) | フォントの種類の指定 |
| fontScale(必須) | フォントサイズのスケール係数(float型) |
| bottomLeftOrigin(任意) | 座標系の原点がどこにあるかを指定(デフォルト:False、画像の左上が原点) |
fontFaceには以下のようなものがある。
| cv2.FONT_HERSHEY_SIMPLEX | 標準的なゴシック体フォント |
| cv2.FONT_HERSHEY_PLAIN | 小さいサイズのゴシック体フォント |
| cv2.FONT_HERSHEY_DUPLEX | 通常サイズのゴシック体フォント(cv2.FONT_HERSHEY_SIMPLEXより太い) |
| cv2.FONT_HERSHEY_COMPLEX | 通常サイズのスクリプト体フォント |
| cv2.FONT_HERSHEY_TRIPLEX | 通常サイズのスクリプト体フォント(cv2.FONT_HERSHEY_COMPLEXより太い) |
| cv2.FONT_HERSHEY_COMPLEX_SMALL | 小さいサイズのスクリプト体フォント |
| cv2.FONT_HERSHEY_SCRIPT_SIMPLEX | 手書き風フォント |
| cv2.FONT_HERSHEY_SCRIPT_COMPLEX | 手書き風フォント(cv2.FONT_HERSHEY_SCRIPT_SIMPLEX より太く、デザインが異なる) |
プログラム例
cv2.putText(img,
"ABCxyz", (20, 50), cv2.FONT_HERSHEY_COMPLEX_SMALL,
2.0, (0, 0, 0), 1, cv2.LINE_AA)
実行結果

(20, 50)を原点とした、R,G,B=0(黒)の"ABCxyz"の文字列が描画される。
なお(20, 50)は文字列の左下(Aの足の部分)である。
linetypeには以下の4つが存在する。
| cv2.LINE_4 | 4連結 |
| cv2.LINE_8 | 8連結(デフォルト) |
| cv2.LINE_AA | アンチエイリアス処理された線 |
| cv2.FILLED | 塗りつぶし(line, putText関数では使用不可) |
line関数を用いてそれぞれのlineTypeを比較すると以下のようになる。

上から、cv2.LINE_4、cv2.LINE_8、cv2.LINE_AAである。
他のものと比較して、cv2.LINE_AAが最も滑らかで綺麗な線になっていることが分かる。