基于opencv的摄像机标定
原理简述:
三维世界中的点的位置与其对应的二维投影,遵从以下公式:
其中,
M表示三维世界中的点;
[R|T]表示欧氏变换,是一个3*4矩阵
A表示相机参数矩阵,存放相机内部参数
P表示M在二维空间的投影,是一个二维点(文献1)。
相机成像投影图如下所示(文献2):
摄像机标定的过程就是找到相机内参,即:矩阵A
A通常为:
|afsx|
A=|0fy|
|001|
图像平面和照相机中心间的距离为焦距f。当像素数组在传感器上偏斜的时候,需要用到倾斜参数s。在大多数情况下,s可以设置为0。于是上式可变为:
|af 0x|
A= |0 fy|
|0 01|
纵横比例参数a是在像素元素非正方形的情况下使用的。通常情况下,其为1。于是上式可变为:
|f 0x|
A= |0 fy|
|0 01|
除焦距f外,标定矩阵中剩余的唯一参数为光心(有时称为主点)的坐标c=[x y],也就是光线坐标轴和图像平面的交点。因为光心通常在图像的中心,
并且图像的坐标是从左上角开始计算的,所以光心的坐标常常接近于图像宽度和高度的一半,即x=图像宽度/2,y=图像高度/2。
重要的事情说三遍,照相机标定的唯一未知变量是焦距f。
标定步骤:
使用OpenCV进行摄像机标定,在OpenCV例程中有现成的例程程序可以实现,
/samples/cpp/tutorial_code/calib3d/camera_calibration里的程序就可以进行单目相机标定。
Near the sample file you'll find the configuration file, which has detailed help of how to edit it. It may be any OpenCV supported file format XML/YAML.
OpenCV Error: Assertion failed (src.size == dst.size && src.channels() == dst.channels()) in cvConvertScale, file /home/djt/software/opencv-3.0.0/modules/core/src/convert.cpp, line 6213
terminate called after throwing an instance of 'cv::Exception'what(): /home/djt/software/opencv-3.0.0/modules/core/src/convert.cpp:6213: error: (-215) src.size == dst.size && src.channels() == dst.channels() in function cvConvertScale
Near the sample file you'll find the configuration file, which has detailed help of how to edit it. It may be any OpenCV supported file format XML/YAML.
OpenCV Error: Assertion failed (src.size == dst.size && src.channels() == dst.channels()) in cvConvertScale, file /home/djt/software/opencv-3.0.0/modules/core/src/convert.cpp, line 6213
terminate called after throwing an instance of 'cv::Exception'what(): /home/djt/software/opencv-3.0.0/modules/core/src/convert.cpp:6213: error: (-215) src.size == dst.size && src.channels() == dst.channels() in function cvConvertScale
四:
重点来了
在之后的程序中(如增强现实中)要是调用该矩阵,一定要将FileStorage类读入数据的校正矩阵定义为Mat cameraMatrix = Mat::eye(3, 3, CV_64F);且取用时用
cameraMatrix.at<double>(0,0) = 1.0; 而不能用cameraMatrix.at<float>(0,0) = 1.0;也不能用Mat_<float> camMatrix; camMatrix = Mat::eye(3, 3, CV_64F);否则
会因数据类型不符而导致后续程序计算错误,但却不报错。但可以通过先读到Mat cameraMatrix = Mat::eye(3, 3, CV_64F);定义变量中再逐个赋值给
Mat_<float> camMatrix1;定义矩阵。但赋值时,camMatrix1(i,j)=cameraMatrix.at<double>(i,j); double类型一定不要写错。
参考资料:
主要参考以下博客,其链接如下:
[1]:http://blog.csdn.net/chuhang_zhqr/article/details/50036443
[2]:http://blog.csdn.net/chuhang_zhqr/article/details/49894477
[3]:http://blog.csdn.net/chuhang_zhqr/article/details/49999143
以及计算机视觉的两本书(以上几篇博客也主要是参考文献5):
[4]:Python计算机视觉编程 第四章
[5]:深入理解OpenCV实用计算机视觉项目解析 第二章
因为用到程序主要是opencv的一个例程,其中用到的两个官方文档如下
opencv document:
http://docs.opencv.org/2.4/doc/tutorials/calib3d/camera_calibration/camera_calibration.html
http://docs.opencv.org/2.4/modules/calib3d/doc/camera_calibration_and_3d_reconstruction.html
基于opencv的摄像机标定相关推荐
- 用OpenCV进行摄像机标定
用OpenCV进行摄像机标定 照相机已经存在很长时间了.然而,随着廉价针孔相机在20世纪末的引入,日常生活中变得司空见惯.不幸的是,这种廉价伴随着它的代价:显著的扭曲.幸运的是,这些常数,通过校准和一 ...
- Python+OpenCV:摄像机标定(Camera Calibration)
Python+OpenCV:摄像机标定(Camera Calibration) 理论 Some pinhole cameras introduce significant distortion to ...
- 【OpenCV】摄像机标定+畸变校正
摄像机标定 本文目的在于记录如何使用MATLAB做摄像机标定,并通过opencv进行校正后的显示. 首先关于校正的基本知识通过OpenCV官网的介绍即可简单了解: http://docs.opencv ...
- [OpenCV-Python] OpenCV 中摄像机标定和 3D 重构 部分 VII
部分 VII 摄像机标定和 3D 重构 OpenCV-Python 中文教程(搬运)目录 42 摄像机标定 目标 • 学习摄像机畸变以及摄像机的内部参数和外部参数 • 学习找到这些参数,对畸变图像进行 ...
- OpenCV-Python] OpenCV 中摄像机标定和 3D 重构 部分 VII
https://www.cnblogs.com/Undo-self-blog/p/8448500.html 42 摄像机标定 目标 • 学习摄像机畸变以及摄像机的内部参数和外部参数 • 学习找到这些参 ...
- 基于OpenCV进行相机标定
相机已经存在了很长一段时间. 随着二十世纪末廉价针孔相机的推出,相机已经在日常生活中普及.虽然价格便宜,但是成像存在严重的畸变.不过,这些畸变是固定的形式,基于标定和重映技术可以纠正畸变.此外,基于标 ...
- 基于OPENCV的投影仪标定(源码)
opencv3.0的源码,之前很苦恼投影仪的标定,opencv提供了一个demo,上传源码: #include <opencv2/highgui.hpp> #include #includ ...
- 三维重建 - 摄像机标定和立体匹配中极线约束方法
摘自http://www.ahcit.com/lanmuyd.asp?id=2677,以作备录,若有版本问题,请告知. 关于摄像机标定和立体匹配中极线约束方法方面,描述的比较清楚. 一种基于OpenC ...
- 一种基于OpenCV的三维重建实现方案
一种基于OpenCV的三维重建实现方案 来源:淘金者论文范文 作者:Www.TaoJz.Com 日期:08/30/09 摘 要 本文以计算机视觉三维重建技术为研究对象,分析了开放计算机视觉函数库Ope ...
最新文章
- oracle 工单查so,查询工单列表
- hdu 2111 Saving HDU (DP)
- 公众号一年能有多少收入?
- Linux下通过命令设置系统时间
- php函数声明提前,php的日期处理函数及uchome的function_coomon中日期处理函数的研究...
- vue过滤器微信小程序过滤器和百度智能小程序过滤器
- python12_Python 12 基础知识
- dll和so文件区别与构成
- Microsemi Libero使用技巧3——使用FlashPro单独下载程序
- [异步图书].Python机器学习:预测分析核心算法.pdf
- max30102c语言,max30102参考测试程序 网上找的max30102测试程序 - 下载 - 搜珍网
- 每次遇到浏览器主页被篡改的问题,就特别气愤加头疼
- c语言 节日,农历阳历之间转换和节气节日查询C语言编程
- Chrome书签同步方法
- Git创建本地仓库执行git init时报Permission denied的问题
- 《Modelica教程》by Fritzson 导言部分
- (数据科学学习手札58)在R中处理有缺失值数据的高级方法
- FA固定资产录入时的细节:是否输入累计折旧
- 又现信息泄露事 融云通讯安全守护之道
- Hadoop3.2.1 【 YARN 】源码分析 : NodeStatusUpdaterImpl概述
热门文章
- vue 管理后台 使用虚拟键盘组件 支持中英文切换
- 计算机毕业设计Java高校教学资源共享平台(源码+系统+mysql数据库+lw文档)
- FastDDS的服务器记录-译-
- jquery 瀑布流实例最流行瀑布流图片展示
- html 课件DW,DW《网页设计与制作》教学课件.ppt
- Js实现中国公民身份证号码有效性验证
- C 强制类型转换 char转int的小陷阱
- python为什么要创建央视对象_案例研究:使用python获取中央电视台的节目单
- [Graphics] 法线图生成器(Normal map generator)
- 组原学习笔记五:计算机的运算方法