0

一連の画像があります。こちらにサンプル画像を掲載しています。各画像に描かれた 60 個のマーカーの座標として、画像から特徴を抽出する必要があります。次に、特定のマーカー (鼻の上) から、他のすべてのマーカーの距離を見つける必要があります。

これを達成するためにopenCVを言語として使用しようとしていて、ドキュメントを読んでいましたが、1週間経ってもまだ目的を達成できません。誰でも私を正しい方向に導いてください。解決策全体ではない場合は、それを達成する方法についてのアイデアを得るために、従うべきリンクまたはチュートリアルを提供してください。

アップロードした私の画像を参照してください。マーカーは画像全体に青く塗られています。これは、特徴を取り出す必要があるイメージです。

どんな助けでも大歓迎です。ありがとう。

これが私が試したコードですが、ひどくオフトラックであることが判明しました。

     //This function threshold the HSV image and create a binary image
Mat GetThresholdedImage(Mat imgRGB){        
    Mat imgThresh;   
    inRange(imgRGB, Scalar(95,110,151), Scalar(112,125,169), imgThresh); 
    return imgThresh;
} 
int main(){
 Mat frame;
 frame = imread("other/test2.jpeg");
 namedWindow("Input");      
 namedWindow("Ball");

 Mat imgRGB=frame.clone();

 Mat imgThresh = GetThresholdedImage(imgRGB);


 imshow("Ball", imgThresh);            
 imshow("Input", frame);

 waitKey(0);
 return 0;
}

4

2 に答える 2

3

このような問題の場合、やりたいことを達成するための解決策が複数ある可能性があります。OpenCV を使用して、関数を自分で実装することができます。このタイプの問題を処理する方法に関するいくつかの提案:

  1. イメージから青いマーカーをセグメント化します。これらのポイントを取得するために、青チャネルのしきい値を使用する可能性があります。青のチャンネルではかなり高い値になるはずです。
  2. マーカーは複数のピクセルに表示されるため、青色の近隣ピクセルをクラスターとして扱い、各クラスター (マーカー) の重心を見つけることができます。
  3. 鼻先の重心から、顔の各クラスターの重心までの距離を計算します。

また、いくつかのことに依存します。この画像のシャツにはかなりの青が含まれているように見えるため、マーカーでセグメント化される可能性があります。これを削除するには、OpenCV の顔検出を使用して顔を見つけ、見つかった顔の領域だけを心配します。

また、ノーズマーカーがどこにあるかを知っているかどうかにもよります。手動で選択できる場合 (OpenCV を使用してこれを行うことができます)、ノーズ マーカーにシードを設定してから、前の手順を実行できます。

手動で選択できない場合、この画像に基づいて、鼻のマーカーが画像の中心に近いように見えます (鼻先を使用している場合)。画像の中心に最も近い重心を見つけて、これを使用できる場合があります。ただし、これを行うことは、テストする残りの画像に依存します。また、鼻マーカーを決定するこの自動方法は、非常に近い他のマーカーがあるため、機能しない場合があります。実際の鼻先の代わりに、それらの 1 つを拾うことができます。

私が言ったように、これはかなり主観的な問題であり、それを解決するための多くの解決策がある可能性があります. これらは、正しい方向に導くのに役立つかもしれないいくつかの提案です。

于 2013-09-12T21:15:32.233 に答える