【Python】カメラ映像にテキストやロゴをリアルタイムで合成する方法

【Python】カメラ映像にテキストやロゴをリアルタイムで合成する方法 Python

ライブ映像にテロップやロゴを重ねたい、という要望は監視カメラ、配信映像、サイネージなど多くのシーンで存在します。PythonとOpenCVを使えば、カメラ映像にリアルタイムでテキストや画像(ロゴ)を簡単に合成できます。

この記事では、Webカメラの映像に任意の文字列やロゴ画像を重ねて表示する方法を紹介します。

必要なライブラリ

pip install opencv-python

基本スクリプト:Webカメラを起動

import cv2

cap = cv2.VideoCapture(0)

while True:
    ret, frame = cap.read()
    if not ret:
        break

    # 映像にそのまま表示
    cv2.imshow("Camera", frame)

    if cv2.waitKey(1) & 0xFF == ord("q"):
        break

cap.release()
cv2.destroyAllWindows()

テキスト(テロップ)を合成する

cv2.putText(
    frame,
    "Recording - Press Q to Quit",
    (10, 30),
    cv2.FONT_HERSHEY_SIMPLEX,
    1.0,
    (0, 255, 0),
    2,
    cv2.LINE_AA
)

フォント・サイズ・色・太さを自由に調整可能です。

ロゴ画像を合成する

import numpy as np

# ロゴ画像を読み込み(例:PNGファイル)
logo = cv2.imread("logo.png", cv2.IMREAD_UNCHANGED)

# ロゴ画像のサイズ調整(必要に応じて)
logo = cv2.resize(logo, (100, 100))

while True:
    ret, frame = cap.read()
    if not ret:
        break

    # ROI(ロゴを配置する位置)
    y1, y2 = 10, 110
    x1, x2 = 10, 110

    # 透過付きPNGの合成処理
    if logo.shape[2] == 4:
        alpha_s = logo[:, :, 3] / 255.0
        alpha_l = 1.0 - alpha_s

        for c in range(3):
            frame[y1:y2, x1:x2, c] = (alpha_s * logo[:, :, c] +
                                      alpha_l * frame[y1:y2, x1:x2, c])
    else:
        frame[y1:y2, x1:x2] = logo

    cv2.putText(frame, "Live Stream", (120, 40), cv2.FONT_HERSHEY_SIMPLEX, 1, (255, 255, 255), 2)
    cv2.imshow("Overlay", frame)

    if cv2.waitKey(1) & 0xFF == ord("q"):
        break

応用例

  • 現在時刻をリアルタイムで表示(datetime.now()を使用)
  • 顔認識や物体検出と連携して枠+名前を表示
  • 状態に応じて色や文言を切り替える(「録画中」「検出あり」など)

まとめ

OpenCVを使えば、カメラ映像にリアルタイムで文字や画像を合成でき、監視、配信、ログ記録などに活用できます。文字のスタイル調整やロゴの位置・透明度の工夫により、柔軟なインターフェースを実現できます。

今後は、検出処理(顔・動き・QRコードなど)と連携し、状態に応じた表示切り替えや、自動スクリーンショット保存などへも応用可能です。