这段代码有什么问题std::vector<cv::Point3f> objectPoints; cv::Point3f point(float point_x, float point_y, float point_z); objectPoints.push_back(point);
时间: 2024-04-14 14:28:59 浏览: 54
这段代码存在一些问题。首先,在声明 `cv::Point3f point(float point_x, float point_y, float point_z);` 时,应该使用 `=` 而不是 `;`,这样才能正确地创建一个 `cv::Point3f` 对象并初始化它。另外,你应该将 `point` 对象的坐标作为参数传递给构造函数,而不是将它作为一个函数调用。以下是修正后的代码:
```cpp
std::vector<cv::Point3f> objectPoints;
cv::Point3f point(point_x, point_y, point_z);
objectPoints.push_back(point);
```
这样,你将能够正确地创建一个 `cv::Point3f` 对象,并将其添加到 `objectPoints` 向量中。
相关问题
怎么将std::vector<float> object_keypoints转化为vector<Point2f>
在C++中,`std::vector<float>`通常存储一维数据,比如坐标点的各个分量(x和y),而`cv::Point2f`是一个二维点结构,包含两个`float`类型的值。如果你想将`object_keypoints`这个一维向量转换成`vector<cv::Point2f>`,你需要创建一个新的二维向量,并按照每个元素包含x和y的方式来填充。
以下是步骤:
1. 首先,确保`object_keypoints`的大小是偶数,因为它应该包含一对(x, y)坐标对。
2. 创建一个新的`std::vector<cv::Point2f>`,假设名为`keypoints_vector`。
3. 使用循环遍历`object_keypoints`,例如使用`for`循环:
```cpp
for (size_t i = 0; i < object_keypoints.size(); i += 2) {
cv::Point2f point(object_keypoints[i], object_keypoints[i + 1]);
keypoints_vector.push_back(point);
}
```
这里i每次增加2是因为每对坐标占两个位置。
4. 现在`keypoints_vector`包含了从`object_keypoints`转换来的`cv::Point2f`对象。
std::vector<std::vector<cv::Point2f>>& dst_rfrois_vtss,
这是一个 C++ 的标准库中的 vector 类,它的模板参数是一个 vector,该 vector 的模板参数是 cv::Point2f 类型,因此这是一个二维的 cv::Point2f 数组。cv::Point2f 是 OpenCV 库中的一个类,表示二维平面上的一个点,其成员变量是 float 类型的 x 和 y 坐标。因此,std::vector<std::vector<cv::Point2f>> 可以用来表示一个二维的点集数组。
阅读全文