在OpenCV中,可以使用calibrateCamera函数,通过多个视角的2D/3D对应,求解出该相机的内参数和每一个视角的外参数。

使用C++接口时的输入参数如下:

objectPoints - 每一个视角中,关键点的世界坐标系。可以使用vector < vector <Point3f> >类型,第一层vector表示每一个视角,第二层vector表示每一个点。

如果使用OpenCV自带的棋盘格,可以直接传入交叉点(不包括边角)的实际坐标,以物理世界尺度(例如毫米)为单位。

写坐标时,要保证z轴为0,按照先x变化,后y变化,从小到大的顺序来写。如果网格尺寸为5厘米,写作:(0,0,0),(5,0,0), (10,0,0)...(0,5,0), (5,5,0), (10,5,0),...

如下图例子,x方向是8个交叉点,y方向3个较差点。

imagePoints - 每一个视角中,关键点的图像坐标系。可以使用vector < vector <Point2f> >类型。

这个值可以通过findChessboardCorners函数从图像中获得。注意:传入findChessboardCorners函数的patternSize参数,要和objectPoints中的行列数统一。

imageSize - 图像尺寸。

flags - 参数。决定是否使用初始值,扭曲参数个数等。

输出参数如下:

cameraMatrix - 3*3的摄像机内矩阵。

distCoeffs - 4*1(具体尺寸取决于flags)。对图像坐标系进行进一步扭曲。

这两个参数是内参数,可以把摄像机坐标系转换成图像坐标系。

rvecs - 每一个视图的旋转向量。vector<Mat>类型,每个vec为3*1,可以用Rodrigues函数转换为3*3的旋转矩阵。

tvecs - 每一个视图的平移向量。vector<Mat>类型,每个vec为3*1。

这两个参数是外参数,每一个视图不同,可以把世界坐标系转换成摄像机坐标系。

* 在2.10文档中,写的是from the model coordinate space (in which object points are specificed) to the world coordinate space。提到model容易引起歧义。

看到这里,问题来了:这个世界坐标系是什么样的?

在objectPoints中,我们实际只设定了每个交叉点的间隔,具体xyz指向哪里却没有给出。

这时候,需要使用drawChessboardCorners函数,把检测到的2D点在原图上显示出来:

这个函数按照先变化x,而后变化y的方式依次画点。先画的行为红色,逐渐变为蓝色。

回顾我们写objectPoints时的方式,可以推断出世界坐标的方向:图中x轴正方向向左,y轴正方向远离镜头,根据右手螺旋,z轴正方向向下。

总结来说,calibrateCamera函数给出的世界坐标方向,是由obejctPoints的设定顺序,以及findChessboardCorners的检测顺序共同决定的。

但是,findChessboardCorners先检测那个角点并不确定。前例从右下角开始,以下就从左上角开始:

另一种常见用法是:先用calibrateCamera标定好摄像机内参,而后使用solvePnP函数只求解外参。solvePnP函数的参数意义和calibrateCamera类似。

转自:http://blog.csdn.net/shenxiaolu1984/article/details/50165635

OpenCV相机标定坐标系详解的更多相关文章

  1. SLAM入门之视觉里程计(6):相机标定 张正友经典标定法详解

    想要从二维图像中获取到场景的三维信息,相机的内参数是必须的,在SLAM中,相机通常是提前标定好的.张正友于1998年在论文:"A Flexible New Technique fro Cam ...

  2. OpenCV相机标定

    标签(空格分隔): Opencv 相机标定是图像处理的基础,虽然相机使用的是小孔成像模型,但是由于小孔的透光非常有限,所以需要使用透镜聚焦足够多的光线.在使用的过程中,需要知道相机的焦距.成像中心以及 ...

  3. ArcGIS中的北京54和西安80投影坐标系详解

    ArcGIS中的北京54和西安80投影坐标系详解 1.首先理解地理坐标系(Geographic coordinate system),Geographic coordinate system直译为地理 ...

  4. Cocos2d-x 3.0坐标系详解(转载)

    Cocos2d-x 3.0坐标系详解 Cocos2d-x坐标系和OpenGL坐标系相同,都是起源于笛卡尔坐标系. 笛卡尔坐标系 笛卡尔坐标系中定义右手系原点在左下角,x向右,y向上,z向外,OpenG ...

  5. CGJ02、BD09、西安80、北京54、CGCS2000常用坐标系详解

    一.万能地图下载器中的常用坐标系 水经注万能地图下载器中的常用的坐标系主要包括WGS84经纬度投影.WGS84 Web 墨卡托投影.WGS84 UTM 投影.北京54高斯投影.西安80高斯投影.CGC ...

  6. [转]地理投影,常用坐标系详解、WGS84、WGS84 Web墨卡托、WGS84 UTM、北京54坐标系、西安80坐标系、CGCS2000坐标系

    转自:http://www.rivermap.cn/docs/show-1829.html 常用坐标系详解 (一)WGS84坐标系 WGS-84坐标系(World Geodetic System一19 ...

  7. OpenCV相机标定和姿态更新

    原帖地址: http://blog.csdn.net/aptx704610875/article/details/48914043 http://blog.csdn.net/aptx704610875 ...

  8. Opencv——相机标定

    相机标定的目的:获取摄像机的内参和外参矩阵(同时也会得到每一幅标定图像的选择和平移矩阵),内参和外参系数可以对之后相机拍摄的图像就进行矫正,得到畸变相对很小的图像. 相机标定的输入:标定图像上所有内角 ...

  9. Unity坐标系详解

    1. World Space(世界坐标系): 我们在场景中添加的物体(如:Cube),他们都是以世界坐标显示在场景中.transform.position 获取的便是这个 坐标数值. 2. Scene ...

随机推荐

  1. 【Maven】Project configuration is not up-to-date with pom.xml错误解决方法

    导入一个Maven项目之后发现有一个如下的错误: Project configuration is not up-to-date with pom.xml. Run project configura ...

  2. 渲染Web视图

    Spring MVC定义了一个名为ViewResolver的接口 public interface ViewResolver{ View resolveViewName(String viewName ...

  3. Oracle表的查询(一)

    表查询关键字.字段.表名不加引号时不区分大小写引号定义的内容区分大小写运算中有null值时,结果为null*nvl(字段,赋值):如果字段值为null,则取后面一个值*like 关键字:%表示若干个字 ...

  4. 树莓派与node.js —— onoff、dht

    1. 发光二极管 tm-onoff var Gpio = require('tm-onoff').Gpio, led = new Gpio(17, 'out'), button = new Gpio( ...

  5. RMQ_ST表

    ]; ]; ]; void init(int n) { int i, j; pwr[] = ; ; i<; ++i) pwr[i] = pwr[i-] << ; ; pwr[j]&l ...

  6. APK模式下,epg版本升级,需要做同步

    采用安卓盒子(APK模式),需要在管理节点做一个同步: 同步目录: /var/www/html/upgradestb 从管理节点向三台业务节点同步: 2018/01/19 conf/server.co ...

  7. HPU第四次积分赛-K :方框(水题,打印图形)

    方框 描述 用'*'打印出一个nxn的字符图形(1<=n<=100). 输入 多组输入.每行输入一个n,输入EOF结束文件. 输出 输出一个满足题意的图形. 输入样例 1  1 2 5 6 ...

  8. webapi core2.1 IdentityServer4.EntityFramework Core进行配置和操作数据

    https://identityserver4.readthedocs.io/en/release/quickstarts/8_entity_framework.html 此连接的实践 vscode ...

  9. 【HDOJ1043】【康拓展开+BFS】

    http://acm.hdu.edu.cn/showproblem.php?pid=1043 Eight Time Limit: 10000/5000 MS (Java/Others)    Memo ...

  10. tomcat localhost

    启动tomcat后,登录本地localhost时,被要求输入用户名和密码,自己也从没有设置过啊,上网查找,原因如下: 机器装的oracle,它自带的httpserver的端口是8080,同时,tomc ...