Python
 Computer >> コンピューター >  >> プログラミング >> Python

PythonのOpenCVモジュールで画像に幾何学図形を描画する方法

はじめに

OpenCVの基本操作のひとつが「画像への描画」です。線、円、矩形(長方形)など、さまざまな幾何学形状を画像上に追加できます。

画像解析の現場では、画像の一部を強調表示したい場面がよくあります。たとえば、注目したい領域を囲む矩形を追加したり、特定の場所を指し示す矢印を描いたりするケースです。本記事では、PythonのOpenCVモジュールを使って画像に幾何学図形を描画する方法を、サンプルコードとともにわかりやすく解説します。

主な描画関数一覧

  • cv2.line() … 画像に直線を描画する関数
  • cv2.rectangle() … 画像に矩形を描画する関数
  • cv2.circle() … 画像に円を描画する関数
  • cv2.putText() … 画像にテキストを書き込む関数
  • cv2.ellipse() … 画像に楕円を描画する関数

準備:空の画像(キャンバス)を作成する

まず、NumPyのnp.zeros()関数を使って、すべてのピクセルが0(黒)の空の画像を作成します。これが描画用のキャンバスになります。

import numpy as np
import cv2

my_img = np.zeros((350, 350, 3), dtype = "uint8")
cv2.imshow('Window', my_img)
cv2.waitKey(0)
cv2.destroyAllWindows()

実行すると、真っ黒なウィンドウが表示されます。この黒いキャンバスに対して、これからさまざまな図形を描いていきます。

直線を描く(cv2.line)

直線を描画するには、cv2.line()関数を使用します。この関数は5つの引数を受け取ります。

  • 描画対象の画像オブジェクト
  • 始点の座標 (x, y)
  • 終点の座標 (x, y)
  • 線の色(BGR形式。RGBではない点に注意
  • 線の太さ(ピクセル単位)

サンプルコード

import numpy as np
import cv2

my_img = np.zeros((350, 350, 3), dtype = "uint8")

# 直線を描画
cv2.line(my_img, (202, 220), (100, 160), (0, 20, 200), 10)

cv2.imshow('Window', my_img)
cv2.waitKey(0)
cv2.destroyAllWindows()

実行結果

PythonのOpenCVモジュールで画像に幾何学図形を描画する方法

矩形(長方形)を描く(cv2.rectangle)

矩形を描画するには、cv2.rectangle()関数を使用します。この関数も5つの引数を受け取ります。

  • 描画対象の画像オブジェクト
  • 左上の頂点の座標 (x, y)
  • 右下の頂点の座標 (x, y)
  • 線の色(BGR形式)
  • 線の太さ(ピクセル単位)

サンプルコード

import numpy as np
import cv2

my_img = np.zeros((400, 400, 3), dtype = "uint8")

# 矩形を描画
cv2.rectangle(my_img, (30, 30), (300, 200), (0, 20, 200), 10)

cv2.imshow('Window', my_img)
# ウィンドウが閉じられるまで画像を表示し続ける
cv2.waitKey(0)
cv2.destroyAllWindows()

実行結果

PythonのOpenCVモジュールで画像に幾何学図形を描画する方法

円を描く(cv2.circle)

円を描画するには、cv2.circle()関数を使用します。引数は以下の5つです。

  • 描画対象の画像オブジェクト
  • 中心の座標 (x, y)
  • 円の半径
  • 線の色(BGR形式)
  • 線の太さ(ピクセル単位)

サンプルコード

import numpy as np
import cv2

my_img = np.zeros((400, 400, 3), dtype = "uint8")

# 円を描画
cv2.circle(my_img, (200, 200), 80, (0, 20, 200), 10)

cv2.imshow('Window', my_img)
cv2.waitKey(0)
cv2.destroyAllWindows()

実行結果

PythonのOpenCVモジュールで画像に幾何学図形を描画する方法

楕円を描く(cv2.ellipse)

楕円を描画するには、cv2.ellipse()関数を使用します。この関数は8つの引数を受け取ります。

  • 描画対象の画像オブジェクト
  • 中心の座標 (x, y)
  • 短軸と長軸の長さ (h, w)
  • 楕円の回転角度(反時計回りで計算)
  • 開始角度(時計回りで計算)
  • 終了角度(時計回りで計算)
  • 線の色(BGR形式)
  • 線の太さ(-1を指定すると塗りつぶし

サンプルコード

import numpy as np
import cv2

my_img = np.zeros((400, 400, 3), dtype = "uint8")

# 楕円を描画
cv2.ellipse(my_img,(256,256),(100,50),0,0,180,255,-1)

cv2.imshow('Window', my_img)
cv2.waitKey(0)
cv2.destroyAllWindows()

実行結果

PythonのOpenCVモジュールで画像に幾何学図形を描画する方法

多角形を描く(cv2.polylines)

多角形を描画するには、cv2.polylines()関数を使用します。必要な引数は以下の5つです。

  • 描画対象の画像オブジェクト
  • 座標の配列
  • 閉じた線にする場合はTrue
  • 線の色
  • 線の太さ

サンプルコード

import numpy as np
import cv2

my_img = np.zeros((400, 400, 3), dtype = "uint8")

pts = np.array([[10,5],[20,30],[70,20],[50,10]], np.int32)
pts = pts.reshape((-1,1,2))

cv2.polylines(my_img,[pts],True,(0,255,255))

cv2.imshow('Window', my_img)
cv2.waitKey(0)
cv2.destroyAllWindows()

実行結果

PythonのOpenCVモジュールで画像に幾何学図形を描画する方法

テキストを描く(cv2.putText)

OpenCVで画像にテキストを書き込むには、cv2.putText()関数を使用します。引数は以下の通りです。

  • 描画対象の画像
  • 書き込むテキスト
  • テキスト開始点の座標
  • 使用するフォント
  • フォントサイズ
  • 文字色
  • 文字の太さ
  • 線の種類(アンチエイリアス指定可)

サンプルコード

import numpy as np
import cv2

my_img = np.zeros((400, 400, 3), dtype = "uint8")

# テキストを書き込む
font = cv2.FONT_HERSHEY_SIMPLEX
cv2.putText(my_img, 'Tutorials Point', (50, 50), font, 0.8, (255, 0, 0), 2, cv2.LINE_AA)

cv2.imshow('Window', my_img)
cv2.waitKey(0)
cv2.destroyAllWindows()

実行結果

PythonのOpenCVモジュールで画像に幾何学図形を描画する方法

まとめ

OpenCVには、cv2.line()cv2.rectangle()cv2.circle()cv2.ellipse()cv2.polylines()cv2.putText()といった豊富な描画関数が用意されています。これらを組み合わせることで、画像解析結果の可視化や注釈付けなどを簡単に行えます。色指定がBGR形式である点や、線の太さに-1を指定すると図形が塗りつぶされる点など、細かい仕様を押さえておくと、より効果的に活用できるでしょう。

  1. PythonとOpenCVを使って動画を逆再生(リバース再生)する方法

    OpenCVは「Open Source Computer Vision(オープンソース・コンピュータビジョン)」の略称です。この強力なライブラリを活用することで、画像や動画に対してさまざまな操作を実行できます。OpenCVの主な応用分野顔認識システムモーショントラッキング(動体追跡)人工ニューラルネットワーク深層ニューラルネットワーク動画ストリーミング などOpenCVのインストール方法Windows環境では、以下のコマンドでインストールできます。pip install opencv-pythonLinux環境の場合は、次のコマンドを使用します。sudo apt-get install pyt

  2. 【Python×OpenCV】画像の収縮(エロージョン)と膨張(ダイレーション)の基本を解説

    本記事では、PythonのOpenCVモジュールを使って、エロージョン(収縮)やダイレーション(膨張)といったモルフォロジー演算(形態学的処理)を実行する方法を解説します。 OpenCVはコンピュータビジョン向けに設計されたオープンソースのライブラリで、もともとはIntelによって開発されました。BSDライセンスのもとで誰でも無料で利用できます。 OpenCVの機能を使うには、まずpipでインストールしておきましょう。 sudo pip3 install opencv-python エロージョン(収縮)とは?仕組みを解説 エロージョンは、前景オブジェクトの境界を削り取っていく処理です。画像内の