36

無地の白い背景にオブジェクトがある場合、OpenCV がキャプチャされたフレームからオブジェクトを簡単に検出する機能を提供しているかどうかは誰にもわかりませんか?

オブジェクト (長方形) の角/中心点を見つけようとしています。私が現在行っている方法は、ブルートフォース(オブジェクトの画像をスキャンする)によるものであり、正確ではありません。私が気付いていないボンネットの下に機能があるかどうか疑問に思っています。

詳細を編集: 小さなソーダ缶とほぼ同じサイズ。カメラはオブジェクトの上に配置され、2D/長方形の感覚を与えます。カメラからの方向/角度はランダムで、コーナー ポイントから計算されます。

それは、オブジェクトがその上にある (黒) だけの白い背景です。ショットの品質は、Logitech Web カメラに期待されるものとほぼ同じです。

コーナーポイントを取得したら、中心を計算します。次に、中心点がセンチメートルに変換されます。

この 4 つのコーナーを「どのように」取得するかが、私が焦点を当てようとしているものです。この画像で私の力ずくの方法を見ることができます:画像

4

5 に答える 5

26

OpenCV で矩形検出を行う方法の例が既にあり (samples/squares.c を参照)、実際には非常に簡単です。

彼らが使用する大まかなアルゴリズムは次のとおりです。

0. rectangles <- {}
1. image <- load image
2. for every channel:
2.1  image_canny <- apply canny edge detector to this channel
2.2  for threshold in bunch_of_increasing_thresholds:
2.2.1   image_thresholds[threshold] <- apply threshold to this channel
2.3  for each contour found in {image_canny} U image_thresholds:
2.3.1   Approximate contour with polygons
2.3.2   if the approximation has four corners and the angles are close to 90 degrees.
2.3.2.1    rectangles <- rectangles U {contour}

彼らがしていることの正確な音訳ではありませんが、それはあなたを助けるはずです.

于 2008-11-26T18:30:23.570 に答える
7

これが役立つことを願って、瞬間法を使用して白黒画像の重心を取得します。

cv::Point getCentroid(cv::Mat img)
{
    cv::Point Coord;
    cv::Moments mm = cv::moments(img,false);
    double moment10 = mm.m10;
    double moment01 = mm.m01;
    double moment00 = mm.m00;
    Coord.x = int(moment10 / moment00);
    Coord.y = int(moment01 / moment00);
    return Coord;
}
于 2012-09-26T19:25:17.560 に答える
4

OpenCV には、これを実現するのに役立つ関数がたくさんあります。その言語でプログラミングしている場合は、ライブラリにラップされた C#.NET の Emgu.CV をダウンロードします。

あなたが望むものを得るいくつかの方法:

  1. 前と同じようにコーナーを見つけます - 例: "CornerHarris" OpenCV 関数

  2. 画像のしきい値を設定し、重心を計算します-http://www.roborealm.com/help/Center%20of%20Gravity.phpを参照してください ...これは私が使用する方法です。COG ルーチンでしきい値処理を実行することもできます。つまり、cog_x += *imagePtr < 128 ? 255:0;

  3. 画像のモーメントを見つけて、回転、重心などを指定します。たとえば、「Moments」OpenCV 関数です。(これは使っていません)

  4. (編集) AForge.NET ライブラリには、コーナー検出機能と、サンプル プロジェクト (MotionDetector) および Web カメラに接続するためのライブラリがあります。Windows と .NET を使用していると仮定すると、これが最も簡単な方法だと思います。

于 2008-11-11T13:43:01.463 に答える
0

これは通常、他のマシンビジョンライブラリではブロブ分析と呼ばれます。私はまだopencvを使用していません。

于 2008-11-10T22:56:51.643 に答える