相机标定程序
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
/*环境OpenCV2.3.1+visual studio2010
*calibdata.txt 保持标定图片的路径(根据实际设置)
*/
#include "stdafx.h"
#include "cv.h"
#include "highgui.h"
#include
#include
#include
using namespace std;
int main()
{
IplImage * show; //RePlay图像指针
cvNamedWindow("RePlay",1);
int number_image_copy=7; //复制图像帧数
CvSize board_size=cvSize(5,7); //标定板角点数
CvSize2D32f square_size=cvSize2D32f(10,10); //假设我的每个标定方格长宽都是1.82厘米
float square_length=square_size.width; //方格长度
float square_height=square_size.height; //方格高度
int board_width=board_size.width; //每行角点数
int board_height=board_size.height; //每列角点数
int total_per_image=board_width*board_height; //每张图片角点总数
int count; //存储每帧图像中实际识别的角点数
int found;//识别标定板角点的标志位
int step; //存储步长,step=successes*total_per_image;
int successes=0; //存储成功找到标定板上所有角点的图像帧数
int a=1; //临时变量,表示在操作第a帧图像
const int NImages = 7;//图片总数
CvMat *rotation_vectors;
CvMat *translation_vectors;
CvPoint2D32f * image_points_buf = new CvPoint2D32f[total_per_image]; //存储角点图像坐标的数组
CvMat * image_points=cvCreateMat(NImages*total_per_image,2,CV_32FC1); //存储角点的图像坐标的矩阵
CvMat * object_points=cvCreateMat(NImages*total_per_image,3,CV_32FC1); //存储角点的三维坐标的矩阵
CvMat * point_counts=cvCreateMat(NImages,1,CV_32SC1); //存储每帧图像的识别的角点数
CvMat * intrinsic_matrix=cvCreateMat(3,3,CV_32FC1);//内参数矩阵
CvMat * distortion_coeffs=cvCreateMat(5,1,CV_32FC1); //畸变系数
rotation_vectors = cvCreateMat(NImages,3,CV_32FC1);//旋转矩阵
translation_vectors = cvCreateMat(NImages,3,CV_32FC1);//平移矩阵
ifstream fin("calibdata.txt"); /* 定标所用图像文件的路径*/
while(a<=number_image_copy)
{
//sprintf_s (filename,"%d.jpg",a);
string filename;
getline(fin,filename);
show=cvLoadImage(filename.c_str(),1);
//寻找棋盘图的内角点位置
found=cvFindChessboardCorners(show,board_size,image_points_buf,&count,
CV_CALIB_CB_ADAPTIVE_THRESH|CV_CALIB_CB_FILTER_QUADS);
if (found==0)
{ //如果没找到标定板角点时
cout<<"第"< cvNamedWindow("RePlay",1); cvShowImage("RePlay",show); cvWaitKey(0); } else { //找到标定板角点时