画像の読み込み、書き込みなどができたところで、続けて図形の描画の仕方を確認します。
線、長方形・矩形、円について、それぞれ共通して、引数に以下を渡しています。(省略もできます)
- img : オブジェクトを描画する変数
- color : オブジェクトの色 (B, G, R)
- thickness : 太さ (-1で塗りつぶす)
- lineType : 線のタイプ、アンチエイリアスなどを設定
線の描画
cv2.line(img, pt1, pt2, color[, thickness[, lineType[, shift]]])
- img – 画像の出力先
- pt1 – 線の始点
- pt2 – 線の終点
- color – 線の色
- thickness – 太さ
- lineType – 線の種類
- 8 (or omitted) – 8-connected line.
- 4 – 4-connected line.
- CV_AA – アンチエイリアス
- shift – 頂点の小数ビットの数
長方形・矩形の描画
cv2.rectangle(img, pt1, pt2, color[, thickness[, lineType[, shift]]])
- img – 画像の出力先
- pt1 – 長方形の頂点
- pt2 – pt1と対角の長方形の頂点
- color – 四角の色
- thickness – 太さ
- lineType – ラインの種類 詳細は
line()
- shift – 頂点の小数ビットの数
円の描画
cv2.circle(img, center, radius, color[, thickness[, lineType[, shift]]])
- img – 画像の出力先
- center – 円の中心
- radius – 円の半径
- color – 円の色
- thickness – 太さ
- lineType – ラインの種類 詳細は
line()
- shift – 頂点の小数ビットの数
サンプルコード
import matplotlib.pyplot as plt
import numpy as np
import cv2
# キャンバスの準備
# キャンバスを縦横500px、BRG、8ビットの符号なしIntで作成
canvas = np.zeros((500, 500, 3), dtype="uint8")
# グレーで塗りつぶし
canvas[:] = [128, 128, 128]
# 図形を描画
# 線
cv2.line(canvas, (0, 0), (100, 100), (255, 0, 0), 1)
# 長方形・矩形
cv2.rectangle(canvas, (50, 150), (150, 250), (0, 255, 0), 2)
# 長方形・矩形塗りつぶし
cv2.rectangle(canvas, (200, 150), (300, 250), (0, 255, 0), -1)
# 円
cv2.circle(canvas, (100, 400), 100, (0, 0, 255), 3)
# 円塗りつぶし
cv2.circle(canvas, (350, 400), 50, (0, 0, 255), -1)
# 描画結果を表示
plt.imshow(canvas)
plt.show()