怎么将vector<vector<float>> objects_keypoints转化为vector<Point2f> objects_keypoints
时间: 2024-09-30 13:05:20 浏览: 24
将`std::vector<std::vector<cv::Point2f>> objects_keypoints`转换为`std::vector<cv::Point2f>`,你需要将每个内部的二维向量展平到一个单一的一维向量中。cv::Point2f是一个包含两个元素(x坐标和y坐标)的简单结构。以下是步骤:
1. 首先创建一个新的`std::vector<cv::Point2f>`用于存储结果。
2. 使用范围for循环遍历外层的`objects_keypoints`,对于每个内层的向量,使用`std::copy`或者`std::move`函数将点逐个添加到新的一维向量中。例如:
```cpp
std::vector<cv::Point2f> flat_objects_keypoints;
flat_objects_keypoints.reserve(objects_keypoints.size() * objects_keypoints[0].size());
for (const auto& inner_keypoints : objects_keypoints) {
std::copy(inner_keypoints.begin(), inner_keypoints.end(), std::back_inserter(flat_objects_keypoints));
}
```
或者更简洁地使用`std::vector`的`insert`迭代器:
```cpp
flat_objects_keypoints.insert(flat_objects_keypoints.end(), objects_keypoints.begin(), objects_keypoints.end());
```
这样就完成了从嵌套向量到单维度向量的转换。
阅读全文