opencv 2d point set
时间: 2023-11-08 13:07:28 浏览: 146
在OpenCV中,可以使用`cv::Mat`或`std::vector`来表示2D点集。以下是使用`std::vector`的示例代码:
```c++
#include <opencv2/opencv.hpp>
int main() {
// 创建一个包含5个2D点的向量
std::vector<cv::Point2f> points = {
cv::Point2f(0, 0),
cv::Point2f(1, 2),
cv::Point2f(3, 1),
cv::Point2f(2, 5),
cv::Point2f(4, 3)
};
// 遍历点集并打印每个点的坐标
for (const auto& point : points) {
std::cout << "x: " << point.x << ", y: " << point.y << std::endl;
}
return 0;
}
```
在这个例子中,我们使用`cv::Point2f`类来表示每个2D点的坐标。您可以使用`x`和`y`成员变量来访问每个点的坐标。在这里,我们创建一个包含5个点的向量,并遍历它以打印每个点的坐标。
相关问题
vector<point2d>A和vector<point2d>B,判断A和B中某个Poind2d的数据相等,并给出索引编号
如果你有两个 `std::vector<cv::Point2d>`,即 A 和 B,你想找出它们之间是否存在相同的 `cv::Point2d` 数据并获取对应索引,可以创建一个临时集合(如 `std::set` 或者 `std::unordered_set`),因为集合不允许重复元素。然后遍历每个向量,将点插入集合,如果插入成功说明该点不存在于另一个向量中,如果插入失败(集合已经有该元素),说明找到了匹配的点。
以下是一个简单的示例:
```cpp
#include <opencv2/core.hpp>
#include <set>
std::vector<cv::Point2d> vecA = ...; // 向量A
std::vector<cv::Point2d> vecB = ...; // 向量B
// 创建一个集合,用于查找重复的点
std::set<cv::Point2d> uniquePoints;
for (size_t i = 0; i < vecA.size(); ++i) {
if (uniquePoints.find(vecA[i]) == uniquePoints.end()) { // 点在集合中不存在
// 点在vecA中是唯一的,记录其索引
std::cout << "Unique point in A at index " << i << ": " << vecA[i] << std::endl;
uniquePoints.insert(vecA[i]);
} else {
// 找到了重复点,找到对应的索引
size_t matchingIndex = std::distance(vecB.begin(), std::find(vecB.begin(), vecB.end(), vecA[i]));
std::cout << "Duplicate point found in B at index " << matchingIndex << ": " << vecA[i] << std::endl;
}
}
// 对于vecB,同样处理
...
```
这里假设 `std::find` 能够找到 `vecB` 中与 `vecA[i]` 相同的点。如果需要精确的匹配结果并且考虑两个向量的长度,可能需要额外检查索引的有效性。
阅读全文