5-6 高度な使い方

リアルタイムカメラプレビュー:パソコンを「ライブカメラ」に変身させよう!

スマートフォンのように、パソコンでライブカメラ映像を表示させたいと思ったことはありませんか?これは、動画撮影、ビデオ通話、さらには簡単な「ホームセキュリティカメラ」の自作など、様々な用途で非常に楽しく便利です。

これまでは、線を引いたり図形を追加したりといった、既存の画像を編集することしかできませんでした。しかし、これからは、人間の目と同じように、パソコンのデバイスで動的なリアルタイム映像を「見る」ことができるようになります!OpenCVのパワーを使えば、カメラに接続してライブ映像を取得し、これまで動画で学んできたような様々な調整や処理を行うことができます。

OpenCVには、カメラに簡単に接続して映像を表示できる強力なツール「VideoCapture」があります。


VideoCapture:あなたの「カメラコントローラー」!

VideoCaptureは、OpenCVのクラスの一つで、「ビデオソース」を制御するために使用されます。このビデオソースは、USBカメラ、コンピューター上のビデオファイル、あるいはインターネット上のライブストリームなど、様々なものに対応できます。VideoCaptureを使えば、まるでリモコンのように、カメラの起動、フレームの読み込み、映像の表示といった操作が可能です。


関数プロトタイプとパラメータ:VideoCaptureに視聴方法を指定しましょう!

以前の章で触れたオブジェクト指向プログラミング(OOP)の概念を覚えていますか?ここでは、クラスの実際の応用例をご紹介します。VideoCaptureクラスは、いわば設計図のようなものです。カメラ、ビデオファイル、またはネットワークビデオストリームの操作方法を定義します。このクラスを通して、リモコンのようにカメラを起動し、フレームを読み込み、映像を表示することができます。

class VideoCapture:
    def __init__(self) -> None: ...  
    # The initializer function you can use to create an empty camera controller.
    def isOpened(self) -> bool: ...   
    # The function to check if the camera has been successfully opened.
    def read(self, image: cv2.typing.MatLike | None = ...)
    -> tuple[bool, cv2.typing.MatLike]: ... 
    # The function to read a frame from the camera.

USBカメラ:接続成功の「秘密の数字」!

SBカメラを接続する最も一般的で簡単な方法は次のとおりです。

captureDevice = cv.VideoCapture(0)

ここでいう「0」は「カメラインデックス番号」です。これは、OpenCVがコンピュータに接続されているUSBカメラのうち、「デフォルト」または「最初の」カメラに接続するように指示するものです。

1. コンピュータにUSBカメラが1台しか接続されていない場合、通常は0になります。

2. カメラが複数接続されている場合(例えば、ノートパソコンの内蔵ウェブカメラと外付けカメラなど)、どのカメラを使用すればよいかコードが混乱することがあります。
➤ V4L2関連ツールのインストールについては、こちらを振り返ってみてください: [第2-3章]節 Jetsonコンポーネント環境のインストール

ご安心ください!以下の「魔法のコマンド」を使えば、カメラのインデックス番号を調べることができます。

v4l2-ctl --list-devices

以下の出力結果をご覧ください。

Graphic confirming that OpenCV is successfully installed on the system
 

読み方は? /dev/videoX を探してください。この小さな X が探している ID です!

  • 例:/dev/video0 が表示された場合、カメラの ID は 0 です。
  • ヒント:複数のビデオ ID が表示されても慌てないでください!リストから USB カメラデバイスを探し、最初に表示された ID を使用してください。

これで、コード内でカメラを完璧に呼び出すためのIDが手に入りました!さあ、コーディングを楽しみましょう!

この方法の素晴らしい点は、非常に簡単だということです。ほとんどのプラグアンドプレイ対応USBカメラは、この方法で直接起動できます。

 


実践例:USBカメラのリアルタイムプレビュー!

さあ、USBカメラからのライブ映像をパソコンに表示するコードを書いてみましょう!

import cv2 as cv # Import the OpenCV library

# --- Step 1: Open your camera! ---
# Create a VideoCapture object and try to open the camera with index 0.
# 0 usually represents your default webcam.
captureDevice = cv.VideoCapture(0)

# --- Step 2: Check if the camera started successfully! ---
# Use the isOpened() method to check if the camera is "ready."
# It returns True if successful, False if it failed.
if not captureDevice.isOpened():
    print("Oops! Could not open the camera. ")
    print("Please check if the camera is connected or being used by another program.")
else:
    # --- Step 3: Enter "live display" mode! ---
    # Enter an infinite loop. 
    # The program will continuously read frames from the camera and display them.
    while True:
        # Read "one frame" from the camera.
        # `ret` (return value) is a boolean that 
        # tells you if the frame was read successfully (True/False).
        # `frame` is the image data that was read, 
        # a NumPy array just like a regular picture.
        ret, frame = captureDevice.read()

        # --- Step 4: Check if the frame was read successfully! ---
        # If `ret` is False, it means reading failed 
        # (e.g., the camera suddenly disconnected).
        if not ret:
            print("Could not read the frame!")
            print("The video stream may have ended or an error occurred.")
            break # Exit the loop and end the program.

        # --- Step 5: Display the camera feed! ---
        # Display the current frame in a window named "Preview Camera".
        cv.imshow("Preview Camera", frame)

        # --- Step 6: Listen to the keyboard, so you can "pause" anytime! ---
        # The cv.waitKey(1) function waits for 
        # 1 millisecond to see if you press a key.
        # `& 0xFF == 27` is a little trick to check 
        # if the 'Esc' key (ASCII value 27) was pressed.
        # If you press 'Esc', the program will exit the loop.
        if cv.waitKey(1) & 0xFF == 27:
            break

    # --- Step 7: Release resources, be a polite program! ---
    # After exiting the loop, it means you don't want to see the feed anymore.
    # At this point, you should call captureDevice.release() to 
    # "close" the camera and free up the hardware resources it's using.
    captureDevice.release()
    # Finally, close all windows created by OpenCV.
    cv.destroyAllWindows()

プログラム結果:

上記のコードを実行すると、USBカメラが正しく接続されていれば、カメラが捉えたライブ映像を表示する新しいウィンドウがポップアップ表示されます。なかなかすごいでしょう?


VideoCaptureを使えば、コンピュータビジョンの「目」を開くことができます!これは非常に基本的な機能ですが、強力な機能です。次に、以下のことを試してみましょう。

1. カメラインデックスの変更:複数のカメラを使用している場合は、`cv.VideoCapture(1)`、`cv.VideoCapture(2)`を実行して、どのカメラの映像が表示されるか確認してみましょう。

2. 画面へのテキストや図形の追加:以前学習した`putText`関数と`rectangle`関数を組み合わせて、ライブ映像に楽しいマーカーを追加してみましょう!

まとめ

おめでとうございます!OpenCV入門編を無事修了しました。画像の読み込みと編集から高度な画像処理まで、多くの実践的なスキルを身につけました。

OpenCVの世界は、ここで紹介した範囲をはるかに超え、はるかに広大で刺激的なものです。このガイドは、ほんの扉を開いたにすぎません。その先には、発見されるのを待っている無数の可能性が広がっています。画像処理は、多くの人工知能アプリケーションにとって不可欠な基盤であることを実感するでしょう。今後の学習では、今日学んだOpenCVの知識をどのように活用してAIの世界をさらに深く掘り下げ、コンピュータが世界を「見る」だけでなく「理解する」ことができるようになるかを学びます。

さあ、探求の旅を始めましょう!この知識を自分のクリエイティブなプロジェクトに応用してみてください。画像処理は楽しさと無限の可能性に満ちていることに気づくでしょう。これからも学習への情熱を持ち続け、常に挑戦し続け、コードで魔法を生み出すプロセスを楽しんでください!

 

Copyright © 2026 YUAN High-Tech Development Co., Ltd.
All rights reserved.