OpenCV部分API翻译--相机标定相关
2017-08-29 21:04
483 查看
持续更新中…(C++版本)
C++原型:
double calibrateCamera(InputArrayOfArrays objectPoints, InputArrayOfArrays imagePoints, Size imageSize, InputOutputArray cameraMatrix, InputOutputArray distCoeffs, OutputArrayOfArrays rvecs, OutputArrayOfArrays tvecs, int flags=0, TermCriteria criteria=TermCriteria( TermCriteria::COUNT+TermCriteria::EPS, 30, DBL_EPSILON) )
参数:
objectPoints
它是一个对于标定图案空间坐标系中的图案的物点的坐标的vector容器的vector容器(比如说std::vector< std::vector< cv::vec3f>>)。外层vector容器包含了与输入的照片个数相同的物点vector容器。如果每张照片都是拍摄于同一个标定图案,那么显而易见的,所有的上述这些物点都是一样的。不过有时候我们有可能使用那些拍了部分标定图案的照片,甚至不同标定图案的照片,在这种情况下,这些物点则会不同。这些点的坐标虽然是3D的,但是考虑到它们在同一坐标系中,如果标定架也是一个平面,那么通常有意义的做法是把这个模型放入一个XY坐标系平面中并且将每个物点的Z坐标设为0。
imagePoints
它是一个关于标定图案物点的重投影的vector容器的vector容器(比如说std::vector< std::vector< cv::Vec2f>>)。imagePoints.size()和objectPoints.size()必须相等, imagePoints[i].size和 objectPoints[i].size()对于每个i都必须相等。
imageSize
图像的尺寸,只是用来初始化相机内参矩阵。
cameraMatrix
输出参数,输出一个形如
![](http://docs.opencv.org/2.4/_images/math/5017fc06df8951eb2ca115915d52e6fe6d8034de.png)
的3X3的浮点型相机矩阵。如果标志位
CV_CALIB_USE_INTRINSIC_GUESS或者CV_CALIB_FIX_ASPECT_RATIO被设立,那么fx, fy, cx, cy的部分或全部在调用这个函数之前就要被初始化。
distCoeffs
输出参数,输出一个关于畸变因子
![](http://docs.opencv.org/2.4/_images/math/94288b7709d10a7ddf286e33db0074512bda0411.png)
的vector,可能有4,5或8个元素。
rvecs
输出参数。输出一个旋转矩阵(详见Rodrigues()) 来评估每幅图像(类型类似std::vector< cv::Mat>)。这就是说,通过每个k阶旋转矩阵以及它相应的k阶转移矩阵(见下一个输出参数的描述),可以使相应的标定图像从模型坐标系(物点在其中被定义)转换到世界坐标系中去。也就是在第k张图像中真实的标定图案的位置。(k=0.. M-1)
tvecs
输出参数。输出评估每幅图像的转移矩阵。
flags
标志位。可以是0,也可以是以下几个值的组合:
CV_CALIB_USE_INTRINSIC_GUESS 相机矩阵包含深度优化后的fx,fy,cx,cy的初始值。
calibrateCamera
根据对标定图案拍摄的几张图片,获得相机的内参和外参。C++原型:
double calibrateCamera(InputArrayOfArrays objectPoints, InputArrayOfArrays imagePoints, Size imageSize, InputOutputArray cameraMatrix, InputOutputArray distCoeffs, OutputArrayOfArrays rvecs, OutputArrayOfArrays tvecs, int flags=0, TermCriteria criteria=TermCriteria( TermCriteria::COUNT+TermCriteria::EPS, 30, DBL_EPSILON) )
参数:
objectPoints
它是一个对于标定图案空间坐标系中的图案的物点的坐标的vector容器的vector容器(比如说std::vector< std::vector< cv::vec3f>>)。外层vector容器包含了与输入的照片个数相同的物点vector容器。如果每张照片都是拍摄于同一个标定图案,那么显而易见的,所有的上述这些物点都是一样的。不过有时候我们有可能使用那些拍了部分标定图案的照片,甚至不同标定图案的照片,在这种情况下,这些物点则会不同。这些点的坐标虽然是3D的,但是考虑到它们在同一坐标系中,如果标定架也是一个平面,那么通常有意义的做法是把这个模型放入一个XY坐标系平面中并且将每个物点的Z坐标设为0。
imagePoints
它是一个关于标定图案物点的重投影的vector容器的vector容器(比如说std::vector< std::vector< cv::Vec2f>>)。imagePoints.size()和objectPoints.size()必须相等, imagePoints[i].size和 objectPoints[i].size()对于每个i都必须相等。
imageSize
图像的尺寸,只是用来初始化相机内参矩阵。
cameraMatrix
输出参数,输出一个形如
![](http://docs.opencv.org/2.4/_images/math/5017fc06df8951eb2ca115915d52e6fe6d8034de.png)
的3X3的浮点型相机矩阵。如果标志位
CV_CALIB_USE_INTRINSIC_GUESS或者CV_CALIB_FIX_ASPECT_RATIO被设立,那么fx, fy, cx, cy的部分或全部在调用这个函数之前就要被初始化。
distCoeffs
输出参数,输出一个关于畸变因子
![](http://docs.opencv.org/2.4/_images/math/94288b7709d10a7ddf286e33db0074512bda0411.png)
的vector,可能有4,5或8个元素。
rvecs
输出参数。输出一个旋转矩阵(详见Rodrigues()) 来评估每幅图像(类型类似std::vector< cv::Mat>)。这就是说,通过每个k阶旋转矩阵以及它相应的k阶转移矩阵(见下一个输出参数的描述),可以使相应的标定图像从模型坐标系(物点在其中被定义)转换到世界坐标系中去。也就是在第k张图像中真实的标定图案的位置。(k=0.. M-1)
tvecs
输出参数。输出评估每幅图像的转移矩阵。
flags
标志位。可以是0,也可以是以下几个值的组合:
CV_CALIB_USE_INTRINSIC_GUESS 相机矩阵包含深度优化后的fx,fy,cx,cy的初始值。
相关文章推荐
- OpenCV XML YAML 文件输入输出(部分翻译)
- Android_Printservice_API_部分翻译
- 《应用Rails进行敏捷Web开发》第四版部分翻译-- 创建你自己的RailsAPI 文档
- OPENCV用户手册之图像处理部分(之一):梯度、边缘与角点(中文翻译)
- Tensorflow Python API 翻译(math_ops)(第二部分)
- Tensorflow Python API 翻译(math_ops)(第二部分)
- OPENCV用户手册之图像处理部分(之三):形态学操作(中文翻译)
- 做项目被log4j的输出格式化参数搞烦了,索性把API的相关部分大致翻译一下,原文参见 ----转载
- 4、RenderScript的部分API翻译
- OPENCV用户手册之图像处理部分(之三):形态学操作(中文翻译)
- OPENCV用户手册之图像处理部分(之二):采样、差值与几何变换(中文翻译)
- OPENCV用户手册之图像处理部分(之四):滤波器与色彩转换(中文翻译)
- indexedDB 操作库IDBWRAPPER 教程翻译及API翻译第二部分part2
- Django tutorial(3) 【翻译】编写第一个Django app,第三部分——玩转模型层的API
- OPENCV之CV部分参考手册的中文翻译
- OPENCV之CV部分参考手册的中文翻译
- WebSocket API HTML5规范翻译(部分)
- 【翻译】编写第一个Django app,第三部分——玩转模型层的API
- jsPlumb 学习笔记(1)(api部分翻译)
- Android_Printservice_API_部分翻译