我从图像的灰色部分得到了一个点矢量,并且写成这样:
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编程的新手,我会照顾你。
答案 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
非常感谢,下次我会照顾你。