OpenCV

画像処理 「OpenCV 4」で図形を描いてみる 線・長方形・円

画像の読み込み、書き込みなどができたところで、続けて図形の描画の仕方を確認します。

線、長方形・矩形、円について、それぞれ共通して、引数に以下を渡しています。(省略もできます)

  • 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()
実行結果