标签摄像机标定

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

标签:摄像机标定

opencv标定程序的代码(完全测试好的)

这个是我在win32 平台下写的程序,测试完全通过:

不过要注意下面的问题:

(1)opencv库是1.0的,我在vc6.0的平台使用

(2)软件的设置要正确

(3)图片载入的时候,使用的是批处理文件(其实就是建一个txt文件,里面写的和dos下面的操作代码一样的输入)

(4)里面现在还有个问题没有解决:在得到角点坐标的时候,cvFind CornerSubPix里面的搜索区域还不明白

(05)下面是我在网上搜的别人的代:测试通过的:

=====================

下面是我的代码:

/*标定的过程:

图片的加载

角点的检测

提取角点精确坐标

参数求解

利用参数对图像进行矫正

*/

#include

#include"cv.h"

#include"highgui.h"

#include

//函数声明

void PrintMat(CvMat *matrix,BOOL save_or_show,FILE *fp);

int main(int argc,char **argv)

{

int i=1;

char k=0;

int CurrentImage = 0;

int CurrentRow = 0; //行

int CurrentColumn = 0; //列

int findcorner_result=0;

FILE *fp; //文件指针

int ChessBoardSize_w =6; //角点个数

int ChessBoardSize_h =7;

int width_pixel =1280; //像素

int high_pixel =1024;

float SquareSize=10; //棋盘大小

int NImages=16;

CvSize ChessBoardSize;

CvSize image_pixel;

int NPoints=0;

int *corner_counter;

float *temppoints; //这里可以使用内存动态存储管理。。。

CvPoint2D32f *corners; //存储角点坐标的数组

//单通道灰度图像

IplImage *grayimage=0;

IplImage *srcimage=0; //三通道图像

IplImage *result_image=0; //矫正以后的图像

CvMat *intrinsic_matrix=0; //内部参数矩阵

CvMat *distortion_coeffs=0; //畸变系数

CvMat *rotation_vectors=0; //旋转向量

CvMat *translation_vectors=0;//平移向量

CvMat *points_counts=0; //图片角点数CvMat *object_points=0; //世界坐标系中角点的坐标CvMat *image_points=0; //检测到的角点坐标

CvMat *temp_matrix,*rotation_matrix,*translation_matrix;

//*****************************************************

//数据载入、开辟空间

image_pixel = cvSize(width_pixel,high_pixel); ChessBoardSize = cvSize(ChessBoardSize_w,ChessBoardSi

ze_h);

NPoints = ChessBoardSize_w*ChessBoardSize_h; corner_counter=calloc(NImages,sizeof(int)); //动态管

理,记着释放空间

temppoints =calloc(NImages*NPoints*3,sizeof(float));

corners =calloc(NImages*NPoints,sizeof(CvPoint2D32f));

if((corner_counter==0 )||(temppoints==0 )||( corners==0 ) )

{

return -1;

}

intrinsic_matrix = cvCreateMat(3,3,CV_32FC1); //内参

数矩阵

distortion_coeffs = cvCreateMat(1,4,CV_32FC1); //形变

参数

rotation_vectors = cvCreateMat(NImages,3,CV_32FC1); //

旋转向量

translation_vectors = cvCreateMat(NImages,3,CV_32FC1); /

/平移向量

points_counts = cvCreateMat(NImages,1,CV_32SC1); //

视图数目

object_points = cvCreateMat(NImages*NPoints,3,CV_32FC1);

//世界坐标系中角点的坐标

image_points = cvCreateMat(NImages*NPoints,2,CV_32FC

1);//检测到的坐标点坐标

temp_matrix= cvCreateMat(1,3,CV_32FC1);

rotation_matrix = cvCreateMat(3,3,CV_32FC1); //旋转

矩阵

translation_matrix = cvCreateMat(3,3,CV_32FC1); //

旋转矩阵

grayimage=cvCreateImage(image_pixel,IPL_DEPTH_8U,1); //

单通道灰度图像

result_image=cvCreateImage(image_pixel,IPL_DEPTH_8U,1); //

校正以后的图像

相关文档
最新文档