• 大小: 34.92MB
    文件类型: .zip
    金币: 1
    下载: 0 次
    发布日期: 2023-06-13
  • 语言: 其他
  • 标签: 相机标定  

资源简介

基于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个文件信息

评论

共有 条评论