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

上传人:壹****1 文档编号:459283615 上传时间:2023-03-20 格式:DOC 页数:24 大小:107.50KB
返回 下载 相关 举报
opencv标定程序的代码(完全测试好的)_第1页
第1页 / 共24页
opencv标定程序的代码(完全测试好的)_第2页
第2页 / 共24页
opencv标定程序的代码(完全测试好的)_第3页
第3页 / 共24页
opencv标定程序的代码(完全测试好的)_第4页
第4页 / 共24页
opencv标定程序的代码(完全测试好的)_第5页
第5页 / 共24页
点击查看更多>>
资源描述

《opencv标定程序的代码(完全测试好的)》由会员分享,可在线阅读,更多相关《opencv标定程序的代码(完全测试好的)(24页珍藏版)》请在金锄头文库上搜索。

1、opencv 标定程序的代码(完全测试好的)/* 转自: http:/ 非常 感谢博主的分享! !*/这个是我在 win32 平台下写的程序,测试完全通过: 不过要注意下面的问题:(1)opencv 库是 1.0 的,我在 vc6.0 的平台使用(2)软件的设置要正确(3)图片载入的时候,使用的是批处理文件(其实就是建 一个 txt 文件,里面写的和 dos 下面的操作代码一样的输入)(4)里面现在还有个问题没有解决:在得到角点坐标的时 候, cvFindCornerSubPix 里面的搜索区域还不明白 ( 05)下面是我在网上搜的别人的代 :测试通过的: A. 基于计算机视觉技术:http:

2、/ <stdlib.h>/函数声明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_pi

3、xel=1280;/ 像素int high_pixel=1024;floatSquareSize=10; intNImages=16;CvSize ChessBoardSize; CvSizeimage_pixel;int NPoints=0;int*corner_counter;float*temppoints;态存储管理。 。CvPoint2D32f *corners;/单通道灰度图像IplImage *grayimage=0;IplImage *srcimage=0;IplImage *result_image=0; 像/棋盘大小/这里可以使用内存动/存储角点坐标的数组/三通道图像/矫正

4、以后的图CvMat *intrinsic_matrix=0; / 内部参数矩 阵CvMat*distortion_coeffs=0;/畸变系数CvMat*rotation_vectors=0;/旋转向量CvMat*translation_vectors=0;/ 平移向量CvMat*points_counts=0;/图片角点数CvMatobject_points=0;/世界坐标系中角点的坐标CvMat *image_points=0;/ 检测到的角点坐标 CvMat *temp_matrix,*rotation_matrix,*translation_matrix;*/数据载入、开辟空间imag

5、e_pixel= cvSize(width_pixel,high_pixel);ChessBoardSize=cvSize(ChessBoardSize_w,ChessBoardSize_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);

6、if(corner_counter=0 )|(temppoints=0 )|( corners=0 ) )return -1;= cvCreateMat(3,3,CV_32FC1);= cvCreateMat(1,4,CV_32FC1);intrinsic_matrix/内参数矩阵distortion_coeffs/形变参数rotation_vectors = cvCreateMat(NImages,3,CV_32FC1);/ 旋转向量translation_vectors = cvCreateMat(NImages,3,CV_32FC1);/ 平移向量points_counts = cvCr

7、eateMat(NImages,1,CV_32SC1); /视图数目object_points =cvCreateMat(NImages*NPoints,3,CV_32FC1);/ 世界坐标系中 角点的坐标image_points = cvCreateMat(NImages*NPoints,2,CV_32FC1);/ 检测到的坐标 点坐标 temp_matrix= cvCreateMat(1,3,CV_32FC1);rotation_matrix = cvCreateMat(3,3,CV_32FC1); /旋转矩阵translation_matrix = cvCreateMat(3,3,CV_

8、32FC1);/旋转矩阵grayimage=cvCreateImage(image_pixel,IPL_DEPTH_8U,1);/单通道灰度图像result_image=cvCreateImage(image_pixel,IPL_DEPTH_8U,1); /校正以后的图像fp = fopen( data1.txt, w+ );/ 打开文件 ,建立一个文件,然后写入数据fprintf(fp, 坐标数据: n ); /写入数据,写入文件/*/图片的加载以及角点的提取if(argc!=NImages+1)printf( 图片加载有误 !);return -1;for(CurrentImage=0;C

9、urrentImage<NImages;CurrentImage+ +)/加载图片if(srcimage=cvLoadImage(argvCurrentImage+1,1)!=0)/色彩转换cvCvtColor(srcimage,grayimage,CV_BGR2GRAY);/角点检测findcorner_result=cvFindChessboardCorners(grayimage,ChessB oardSize,&cornersCurrentImage*NPoints,&corner_counterCurrentImage,CV_CALIB_CB_ADAPT IVE

10、_THRESH);/画出检测到的点cvDrawChessboardCorners(srcimage,ChessBoardSize,&cornersCurrentImage*NPoints,corner_counterCurrentI mage,findcorner_result);/精确坐标位置cvFindCornerSubPix(grayimage,&cornersCurrentImageNPoints,corner_counterCurrentImage,cvSize(10,10), cvSize(-1,-1),/ 这个搜索的范围。 。?cvTermCriteria(CV_

11、TERMCRIT_ITER|CV_TERMCRIT_EPS,500,0.003)/迭代终止条件);cvNamedWindow(image,1); cvShowImage(image,srcimage);printf( 检测到的角点:%dn,corner_counterCurrentlmage);/fprintf(fp, 检测到的角点:%dn,corner_counterCurrentlmage);/for(i=0;i<corner_counterCurrentlmage;i+)/坐标输出/ /printf(” 第 %d 个角点 %f %fn,i,cornersCurrentlmage*N

12、Points+i.x,cornersCurrentlmage*NPoints+i.y);/cvWaitKey(0);printf( 按任意键提取下一幅图片角点。 。 n);/fprintf(fp, 按任意键提取下一幅图片角点。 。n); printf( 角点提取结束 n); printf( 开始定标n);fprintf(fp, 角点提取结束 n);fprintf(fp, 开始定标 n);/棋盘世界坐标系坐标for(CurrentImage = 0 ; CurrentImage < NImages ; CurrentImage+)/ 图片for (CurrentRow = 0; Curre

13、ntRow <ChessBoardSize_h; CurrentRow+)/ 行for (CurrentColumn = 0; CurrentColumn < ChessBoardSize_w; CurrentColumn+)/ 列temppoints(CurrentImage*NPoints*3)+(CurrentRow*ChessBoardSize_w+CurrentColumn)*3=(float)(CurrentRow*SquareSize);temppoints(CurrentImage*NPoints*3)+(CurrentRow*ChessBoardSize_w+CurrentColumn)*3+1=(float)(CurrentColumn*Squ areSize);temppoints(CurrentImage*NPoints*3)+(CurrentRow*ChessB

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 办公文档 > 解决方案

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号