0

画像の灰色の部分から点のベクトルを取得し、次のように記述しました。

std::vector<Point> vectorg;
for(i = 0; i <= hei - 1; i++) {
   for(j = 0; j <= wid - 1; j++) {
      if(mask(i,j) == 128) {
          vectorg.push_back(Point(j,i));
      }
   }
}

特定のセルに格納されている座標を知るには、次の方法があります。

cout << vectorg[0].x;
cout << vectorg[0].y;

問題は逆です。どのセルが特定の座標を保持しているかを知ることは可能ですか? どうもありがとう、私はここでもopencvプログラミングを始めたばかりです。お世話になります。

4

3 に答える 3

0

次の手順を実行してください。

#include <algorithm>
// ...

Point p(searchedX, searchedY);

std::vector<Point>::iterator element = std::find(vectorg.begin(), vectorg.end(), p);

if (element != vectorg.end()) {
    cout << (*element).x << endl;
    cout << (*element).y << endl;
} else {
    cout << "The point is not in the vector" << endl;
}
于 2013-04-17T14:55:11.450 に答える
0

やり過ぎかもしれませんが、(貪欲な徹底的な検索を行わずに) それを行う方法は、ポイントの位置を格納するFLANN インデックスを作成することです。

機能マトリックスは、ポイントの座標で構成されています。OpenCV はベクトルを行列に変換する方法を知っているので、現在のベクトルをそのまま使用できるはずです。次に、1 つのポイントのみが必要な場合は、クエリで 1 つの最近傍を求めるだけです (k パラメーター)。

おまけとして、後で近傍の最も近いポイントも必要であると判断した場合は、k の値を大きくするだけです。

于 2013-04-17T15:11:51.167 に答える