在C++中,vector是一个容器类,用于存储动态数组。
vector<Point2f>表示一个Point2f类型的动态数组,可以理解为一个一维的数组。
而vector<vector<Point2f>>表示一个二维的动态数组,其中每个元素都是一个Point2f类型的动态数组。
为什么要这样嵌套写呢?这是因为在计算机视觉中,我们经常需要处理的是二维的数据,例如图像中的像素、特征点、轮廓点等。因此,我们需要使用一个二维的动态数组来存储这些数据。如果直接使用一个一维的动态数组,可能会比较难以处理这些二维数据。因此,使用vector<vector<Point2f>>这种嵌套写法,可以方便地存储和访问二维数据,同时也具有很大的灵活性和可扩展性。
Point3f是OpenCV库中定义的一个结构体类型,表示一个三维坐标点。在C++中,6.0f表示一个float类型的浮点数,其值为6.0。在C++中,float类型的浮点数通常使用字母"f"来表示,以便于区分double类型的浮点数。如果不加"f",则默认为double类型的浮点数。
#include <opencv2/opencv.hpp>
#include <iostream>
using namespace cv;
using namespace std;
int main()
{
// 定义和初始化一个Point3f类型的变量
Point3f pt1(1.0f, 2.0f, 3.0f);
// 或者使用默认构造函数来初始化
Point3f pt2;
// 访问Point3f变量的成员变量x、y、z
float x = pt1.x;
float y = pt1.y;
float z = pt1.z;
// 修改Point3f变量的成员变量
pt2.x = 4.0f;
pt2.y = 5.0f;
pt2.z = 6.0f;
cout << pt1 << endl;
return 0;
}
遍历棋盘格角点坐标:OpenCV 库中使用的是标准库中的容器类 std::vector。cv::Point3f 是 OpenCV 库中定义的一个结构体类型,表示一个三维坐标点,包含三个 float 类型的成员变量,分别表示 x、y、z 三个坐标轴上的坐标值。在使用 std::vector 容器时,可以将 cv::Point3f 类型的对象作为元素添加到容器中,实现对一组三维坐标点的存储和管理。例如,可以定义一个 std::vector<cv::Point3f> 类型的变量,用于存储多个三维坐标点。
int main() {
// 定义棋盘格大小和个数
Size boardSize(8, 8);
int boardNum = 10;
// 定义棋盘格角点坐标
vector<vector<Point3f>> objPoints;
/*定义了一个二维向量的变量objPoints,其中每个元素都是一个三维点(Point3f)的向量(vector)。*/
/*其中objPoints中的每个元素都是一个由相机观察到的三维物体的点云,可以用于重建三维模型或者计算相机的内外参数等。*/
// 生成棋盘格角点坐标
vector<Point3f> obj;
for (int i = 0; i < boardSize.height; i++)
{
for (int j = 0; j < boardSize.width; j++)
{
obj.push_back(Point3f(j, i, 0));
}
}
for (int i = 0; i < boardNum; i++)
{
objPoints.push_b

最低0.47元/天 解锁文章

1403

被折叠的 条评论
为什么被折叠?



