得到持有某一点的矢量

时间:2013-04-17 14:03:58

标签: opencv vector point

我从图像的灰色部分得到了一个点矢量,并且写成这样:

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编程的新手,我会照顾你。

3 个答案:

答案 0 :(得分: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;
}

答案 1 :(得分:0)

这可能有点矫枉过正,但是这样做的方法(没有进行贪婪的详尽搜索)就是建立一个FLANN index来存储积分的位置。

要素矩阵由点的坐标组成。 由于OpenCV知道如何将向量转换为矩阵,因此您应该能够按原样使用当前向量。 然后,如果您只想要一个点,只需在查询中请求最近的邻居(k参数)。

奖金是,如果您稍后决定需要在附近也有最近的点,只需提高k的值。

答案 2 :(得分:0)

对于迟到的回复表示抱歉,感谢您的回答,他们间接激励了我。

我找到了一种简单的方法。这是通过制作另一个Mat来保存坐标的数字。

std::vector<Point> vectorg;
cv::Mat_<int> Index =Mat_<int>::zeros(hei,wid);
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));
          Index(vector[count])=count;
          count++;
      }
   }
}

这样我就可以通过以下方式知道哪个单元格包含某些坐标:

cout<<Index(36,362); //as example

非常感谢,下次我会照顾你。