相机标定代码相机标定代码


基于OPENCV与VS2010,实现对相机畸变参数的计算,标定, 基于OPENCV与VS2010,实现对相机畸变参数的计算,标定 基于OPENCV与VS2010,实现对相机畸变参数的计算,标定
资源截图
代码片段和文件信息
/****************************************** 
* Copyright (C) 2015 HolaMirai(HolaMirai@163.com) 
* All rights reserved. 
*  
* 文件名:CCalibration.cpp 
* 摘要:相机标CCalibration类的定实现文件
* 当前版本:V1.0 2015年11月17日, HolaMirai 创建该文件
* 历史记录:  
******************************************/  

#include“CCalibration.h“

/* 
* 函数名称:CCalibration
* 函数功能:类构造函数 
* 函数入口:  
* 输入参数:标定板横纵坐标角点数_board_sz 相邻两次图像获取的时间间隔_board_dt(单位:秒) 获取图像的总数_n_boards
* 输出参数:无
* 返 回 值:无
* 其它说明:  
*/  
CCalibration::CCalibration(CvSize _board_sz double _board_dt int _n_boards)
{
//标定板的信息
board_sz = _board_sz;
board_dt = _board_dt;
n_boards = _n_boards;

//为标定参数分配内存
intrinsic_matrix  = cvCreateMat(33CV_32FC1);
distortion_coeffs = cvCreateMat(41CV_32FC1);
}

CCalibration::~CCalibration()
{
cvReleaseMat(&intrinsic_matrix);
cvReleaseMat(&distortion_coeffs);
}

/* 
* 函数名称:calibrateFromCamera
* 函数功能:直接从相机实时获取标定板图像,用于标定
* 函数入口:  
* 输入参数:五
* 输出参数:无
* 返 回 值:是否标定成功,true表示成功,false表示失败
* 其它说明:  
*/  
bool CCalibration::calibrateFromCamera()
{
cvNamedWindow(“Calibration“CV_WINDOW_AUTOSIZE);
cvNamedWindow(“Live“CV_WINDOW_AUTOSIZE);

CvCapture* capture = cvCreateCameraCapture( 0 );//将要标定的摄像头
assert( capture );

int board_n = board_sz.width * board_sz.height;//角点总数
CvMat* image_points      = cvCreateMat(n_boards*board_n2CV_32FC1);// cvMat* cvCreateMat ( int rows int cols int type )
CvMat* object_points     = cvCreateMat(n_boards*board_n3CV_32FC1);//cvCreateMat预定义类型的结构如下:CV_ (S|U|F)C
CvMat* point_counts      = cvCreateMat(n_boards1CV_32SC1);//cvCreateMat矩阵的元素可以是32位浮点型数据(CV_32FC1),或者是无符号的8位三元组的整型数据(CV_8UC3)

CvPoint2D32f* corners = new CvPoint2D32f[ board_n ];

IplImage *image = cvQueryframe( capture );
//imgSize = cvGetSize(image);
IplImage *gray_image = cvCreateImage(cvGetSize(image)81);//subpixel   创建单通道灰度图像

int corner_count;
int successes = 0;//图像系列index
int step frame = 0;

//忽略开始前2s时间的图片
for (int i = 0; i < 33*2; i++)
{
image = cvQueryframe(capture);
cvShowImage(“Live“image);
cvWaitKey(30);
}
//获取足够多视场图片用于标定
while (successes < n_boards)
{
image = cvQueryframe(capture);
cvShowImage(“Live“ image);
cvWaitKey(33);//一帧的时间间隔

//每隔board_dt秒取一张图像
if ( (frame++ % ((int)(33 * board_dt)) ) == 0 )
{
 //Find chessboard corners:
int found = cvFindChessboardCorners(image board_sz corners &corner_count
CV_CALIB_CB_ADAPTIVE_THRESH | CV_CALIB_CB_FILTER_QUADS);
if(found == 0)  continue;//未正确找到角点,继续下一次

//Get Subpixel accuracy on those corners
cvCvtColor(image gray_image CV_BGR2GRAY);                //转换为灰度图像
cvFindCornerSubPix(gray_image corners corner_count      //cvFindChessboardCorners找到的角点仅仅是近似值,必须调用此函数达到亚像素精度,如果第一次定位...
cvSize(1111)cvSize(-1-1) cvTermCriteria(    //角点时忽略调用此函数,那么会导致标定的实际错误
CV_TERMCRIT_EPS+CV_TERMCRIT_ITER 30 0.1 ));

 // 如果该视场获得了好的结果,保存它
 // If we go

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     目录           0  2015-11-17 11:15  摄像头标定
     目录           0  2015-11-17 10:53  摄像头标定摄像头标定
     文件         912  2015-11-16 18:49  摄像头标定摄像头标定.sln
     文件       18944  2015-11-17 11:15  摄像头标定摄像头标定.suo
     文件     3932214  2015-11-17 09:50  摄像头标定摄像头标定calib_0.bmp
     文件     3932214  2015-11-17 09:50  摄像头标定摄像头标定calib_1.bmp
     文件     3932214  2015-11-16 23:18  摄像头标定摄像头标定calib_10.bmp
     文件     3932214  2015-11-16 23:18  摄像头标定摄像头标定calib_11.bmp
     文件     3932214  2015-11-16 23:18  摄像头标定摄像头标定calib_12.bmp
     文件     3932214  2015-11-16 23:18  摄像头标定摄像头标定calib_13.bmp
     文件     3932214  2015-11-16 23:18  摄像头标定摄像头标定calib_14.bmp
     文件     3932214  2015-11-16 23:18  摄像头标定摄像头标定calib_15.bmp
     文件     3932214  2015-11-16 23:18  摄像头标定摄像头标定calib_16.bmp
     文件     3932214  2015-11-16 23:18  摄像头标定摄像头标定calib_17.bmp
     文件     3932214  2015-11-16 23:18  摄像头标定摄像头标定calib_18.bmp
     文件     3932214  2015-11-16 23:18  摄像头标定摄像头标定calib_19.bmp
     文件     3932214  2015-11-17 09:50  摄像头标定摄像头标定calib_2.bmp
     文件     3932214  2015-11-17 09:50  摄像头标定摄像头标定calib_3.bmp
     文件     3932214  2015-11-17 09:50  摄像头标定摄像头标定calib_4.bmp
     文件     3932214  2015-11-17 09:50  摄像头标定摄像头标定calib_5.bmp
     文件     3932214  2015-11-17 09:50  摄像头标定摄像头标定calib_6.bmp
     文件     3932214  2015-11-17 09:50  摄像头标定摄像头标定calib_7.bmp
     文件     3932214  2015-11-17 09:50  摄像头标定摄像头标定calib_8.bmp
     文件     3932214  2015-11-16 23:18  摄像头标定摄像头标定calib_9.bmp
     文件       11307  2015-11-17 10:54  摄像头标定摄像头标定CCalibration.cpp
     文件        1426  2015-11-17 10:45  摄像头标定摄像头标定CCalibration.h
     目录           0  2015-11-17 11:12  摄像头标定摄像头标定Debug
     文件        2993  2015-11-17 11:12  摄像头标定摄像头标定Debug摄像头标定.Build.CppClean.log
     文件         517  2015-11-17 11:12  摄像头标定摄像头标定Debug摄像头标定.log
     文件         250  2015-11-17 10:55  摄像头标定摄像头标定Distortion.xml
     文件         267  2015-11-17 10:55  摄像头标定摄像头标定Intrinsics.xml
............此处省略4个文件信息

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件举报,一经查实,本站将立刻删除。

发表评论

评论列表(条)