2022年4月30日土曜日

PySimpleGUIとOpenCVでwebカメラ画像上に文字列を描画する

OpenCVで文字列を描画するにはputText関数を使用します。引数には以下を指定します
・描画先イメージ
・文字列
・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_SCRIPT_COMPLEX/FONT_ITALIC
・fontScale:フォントの大きさの倍率
・color: 描画色
・thickness: 線の太さ

サンプルコードの実行手順

1. PySimpleGUIとOpenCVがインストールされた環境の構築
以下のページを参照して、環境を構築します。
PySimpleGUIとOpenCVをインストールしてwebカメラの映像をウインドウを表示する

2. サンプルプログラムの作成と実行
以下のファイルを保存して、実行します。
psgui_opencv_puttext.py
import PySimpleGUI as sg
import cv2


sg.theme('SystemDefault')
layout = [
  [sg.Image(key='img1')]
]

# webカメラをキャプチャー
capture = cv2.VideoCapture(0)

# webカメラの解像度を取得
width = int(capture.get(cv2.CAP_PROP_FRAME_WIDTH))
height = int(capture.get(cv2.CAP_PROP_FRAME_HEIGHT))
window = sg.Window("webカメラ画面", layout=layout, finalize=True)
# イベントループ
while True:
  event, values = window.read(timeout=50)
  if event == sg.WIN_CLOSED:
    break
  rv, frame = capture.read()
  if rv is True:
    # 文字列描画
    ti = cv2.putText(frame,
      "Width: {}, Height:{}".format(width, height),
      org=(10, int(height/10)*9),
      fontFace=cv2.FONT_HERSHEY_SCRIPT_SIMPLEX,
      fontScale=1,
      color=(0, 0, 0),
      thickness=3
    )
    # pngに変換して、Image更新
    img = cv2.imencode('.png', ti)[1].tobytes()
    window['img1'].update(data=img)


capture.release()
window.close()

・実行方法
以下のコマンドを実行します。
python3 psgui_opencv_puttext.py

関連情報

PySimpleGUIで画像を表示する

・OpenCVに関する他の記事はこちらを参照してください。

0 件のコメント:

コメントを投稿