标签摄像机标定
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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); //
校正以后的图像