1

私はあらゆる物体の形状の検出に取り組んでいます。背景が白で前景/オブジェクトが黒のバイナリイメージがあります。黒く前景の物体の形を検出する必要があります。

どうすればいいですか?形は人/車/箱などの形かもしれません。助けてください

4

2 に答える 2

2

amphetamachineが言ったように、どちらが最終的な目標かはわかりませんが、形状を検出するためのかなり一般的なアプローチはバイナリイメージを与えて「CvContour」のセット(実際にはcvSeq)を返すcvFindContoursを使用することです。バイナリ画像は、画像をしきい値処理することで非常に簡単に取得できます(cvThreshold)。opencvsrcディレクトリのsample/にあるcontours.cの例を確認してください。このリンクも確認してください。

ノア(2009)opencvチュートリアル

このサンプルコードはあなたに一般的な考えを与えるでしょう:

cvThreshold( g_gray, g_gray, g_thresh, 255, CV_THRESH_BINARY );
cvFindContours( g_gray, g_storage, &contours );
cvZero( g_gray );
if( contours ){
    cvDrawContours(
        g_gray,
        contours,
        cvScalarAll(255),
        cvScalarAll(255),
        100 );
}
cvShowImage( "Contours", g_gray );

輪郭のエンコーディングができたら、2つの輪郭を取り、これらの輪郭間の類似性の尺度を返すcvMatchShapesを使用できます。

このアプローチがあなたに有利なスタートを提供することを願っています!

于 2010-04-06T02:16:19.730 に答える
2

正確な形状検出を行うには、haar検出または少なくともK最近傍法を使用する必要があります。Haarの検出は非常に正確ですが、設定には長い時間がかかります。K最近傍法は設定が簡単ですが、それほど正確ではありません。このyoutubeビデオをチェックしてください。この男は、KNNを使用してさまざまな手のジェスチャーを検出しています。比較画像は基本的に黒い塊であることに注意してください。KNNの悪い点は、プログラムの実行に多くのリソースが必要になることですが、haar検出では、haartraining.exeを使用してカスケードxmlファイルを作成すると、主要な処理がすでに実行されています。

于 2010-04-14T07:24:02.720 に答える