現在の位置: ホーム> 最新記事一覧> PHP と OpenCV を組み合わせた効率的なオプティカル フロー トラッキングの実装に関するチュートリアル

PHP と OpenCV を組み合わせた効率的なオプティカル フロー トラッキングの実装に関するチュートリアル

M66 2025-10-25

導入

オプティカル フロー トラッキングは、コンピューター ビジョンにおける重要なテクノロジーの 1 つです。移動する物体の位置と速度を追跡するために使用できます。ビデオ監視、インテリジェント分析、その他のシナリオで広く使用されています。この記事では、PHP 言語と OpenCV ライブラリを組み合わせて使用​​し、オプティカル フロー トラッキング機能を実装する方法を説明します。

OpenCV ライブラリをインストールして構成する

まず、OpenCV ライブラリをインストールし、PHP の OpenCV 拡張機能が適切に動作していることを確認する必要があります。インストールと設定については、OpenCV および PHP 拡張機能の公式ドキュメントを参照してください。

ビデオシーケンスを取得する

オプティカル フロー トラッキングの前に、ビデオ シーケンスを入力として取得する必要があります。ビデオ ファイルは、OpenCV の cvCreateFileCapture 関数を使用してロードできます。次に例を示します。

 $videoFilePath = 'ビデオファイルへのパス';
$videoCapture = cvCreateFileCapture($videoFilePath);

オプティカル フロー追跡アルゴリズムを呼び出す

OpenCV が提供する cvCalcOpticalFlowLK 関数を使用してオプティカル フローを計算するには、現在のフレームと前のフレームの画像を提供する必要があります。例えば:

 // 最初のフレームを読み選ぶります $frame1 = cvQueryFrame($videoCapture);

while ($frame1 !== null) {
    // 2 番目のフレームを読み選ぶります $frame2 = cvQueryFrame($videoCapture);

    if ($frame2 === null) {
        壊す;
    }

    // グレースケール画像に変換 $gray1 = cvCreateImage(cvGetSize($frame1), IPL_DEPTH_8U, 1);
    $gray2 = cvCreateImage(cvGetSize($frame2), IPL_DEPTH_8U, 1);
    cvCvtColor($frame1, $gray1, CV_BGR2GRAY);
    cvCvtColor($frame2, $gray2, CV_BGR2GRAY);

    // オプティカル フローを保存する画像を作成 $flowWidth = cvGetSize($gray1)->width;
    $flowHeight = cvGetSize($gray1)->高いさ;
    $flowX = cvCreateImage(cvSize($flowWidth, $flowHeight), IPL_DEPTH_32F, 1);
    $flowY = cvCreateImage(cvSize($flowWidth, $flowHeight), IPL_DEPTH_32F, 1);

    // オプティカル フローを計算するします cvCalcOpticalFlowLK($gray1, $gray2, cvSize(10, 10), $flowX, $flowY);

    // オプティカル フローの結果は、ここでさらに分析するして処理できます。 // フォワードのフレームを更新するします $frame1 = $frame2;
}

// リソースを解放 cvReleaseCapture($videoCapture);

上記のコードでは、オプティカル フロー アルゴリズムによる処理のために、cvCvtColor 関数を通じてカラー フレームがグレースケール イメージに変換されます。オプティカル フローの結果は $flowX と $flowY に保存され、その後の分析に使用できます。

さらなる処理と分析

オプティカル フローの計算が完了すると、移動オブジェクトの位置や速度の決定などの結果を分析できます。次のコードは、オプティカル フロー サイズを計算する方法を示しています。

 // オプティカル フロー サイズを計算するします $flowMagnitude = cvCreateImage(cvSize($flowWidth, $flowHeight), IPL_DEPTH_32F, 1);
cvCartToPolar($flowX, $flowY, $flowMagnitude, cvCreateImage(cvSize($flowWidth, $flowHeight), IPL_DEPTH_32F, 1), 1);

cvCartToPolar 関数を通じて、オプティカル フローの x 成分と y 成分が極座標に変換され、各ピクセルのオプティカル フロー サイズが計算されるため、移動オブジェクトをさらに分析できます。

要約する

この記事では、PHP 言語と OpenCV ライブラリを使用して、環境構成、ビデオ シーケンスの取得、オプティカル フローの計算と結果の分析を含むオプティカル フロー トラッキングを実装する方法を紹介します。これらの手順を習得すると、オプティカル フロー テクノロジーをビデオ監視やオブジ​​ェクト追跡などのアプリケーションで柔軟に使用して、画像処理のインテリジェンスを向上させることができます。