2

画像シーケンス (ビデオ) があります。画像シーケンス内のオブジェクトの数を数えたいと思います。ただし、主な目的は、オブジェクトが複数のフレームに存在する可能性があるため、すべてのフレームだけでなく、それらを 1 回カウントすることです。私の考えは、オクルージョンが少ないため、オブジェクトが画面を出るときにカウントすることです。画像の下部をゼロ以外のピクセルでスキャンすることで、これを行うことを考えています。

スキャンを実行したい CV_FILLED バイナリ イメージ (四角形関数から) があり、abject が見つかった場合はオブジェクトにインスタンスを作成します。ただし、このスキャンでは、水平線に沿ってすべてのピクセルをスキャンするのではなく、特定のセクションのみをスキャンします。

特定の列などの範囲で実行できるように、マージンでスキップします。

私が持っているサンプルのバイナリ イメージが添付されていCV_FILLED バイナリ イメージます。フィードから取得した画像です。この画像のオブジェクトだけでなく、まだ来ているオブジェクトも数えたいと思います。

検出されたオブジェクトの全体像をここに添付します。ご指導や建設的な批判を歓迎します * CVBlob は使用したくありません

4

3 に答える 3

1

If the squares do not overlap at the bottom, I suggest the following:

scan the very bottom row of the image and identify those connected pixels which are white. Each white line will correspond to one square. Save the center of the white line segment and its length. In the next frame, do the same and associate the corresponding line segments to the previous (same length and center very close). When you cannot find a corresponding line segment anymore, the square has moved out of the image which means you can increase your squares counter by one. Note that line segments at the right and left ends of the line will have decreasing length with every frame.

于 2012-11-18T20:38:43.797 に答える
1

cvBlobLib を使用したくない場合は、OpenCV の一部である輪郭検出を使用できます。

Web サイトにチュートリアルがあります。

メソッドのドキュメントはこちらです。画像は非常に単純に見えますが、オクルージョンのあるブロブを取得する場合は、CV_RETR_EXTERNAL 定数を調べて外側の輪郭のみを取得する必要があります。

メソッドの結果を使用するにはもう少し作業が必要ですが、それは私が通常使用するものです。

お役に立てれば。

于 2012-11-12T08:23:39.747 に答える
0

Thxみんな。私はすでにこれを解決することができました。正方形のパスに沿って小さなROIを使用countNonZero()し、ROI内で見つけました。

booleanROIにまだ白いピクセルがあるかどうかを確認するために、変数をチェックし続けました。そうでない場合は、カウンターをインクリメントします。うまくいき、数えることができました。

あなたの入力のためのThx...

于 2012-11-19T09:42:38.073 に答える