资源简介
基于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.xm
文件 267 2015-11-17 10:55 摄像头标定\摄像头标定\Intrinsics.xm
............此处省略4个文件信息
评论
共有 条评论