相机标定

#include "stdafx.h"
DECLAREGLOBAL
int ZHANGZHENGYOUBIAODING(const char* chessdir)  
{  
    int  CurrentImage  = 0;  
    int  CurrentRow    = 0;         //行   
    int  CurrentColumn = 0;         //列  
 
    int ChessBoardSize_w = 8;       //角点个数  
    int ChessBoardSize_h = 6;  
    bool  findcorner_result = false;  
    float  SquareSize=10;//方格大小  
 
      
      
    Mat src;  
    Mat gray;  
    Mat cameraMatrix; //intrinsic  
    Mat distCoeffs;  
    vector<Mat> rvecs,tvecs;  
    Mat rmatrix,tmatrix;  
 
 
    vector<Point2f> imageCorners;//存储角点  
    vector<vector<Point2f>> imagePoints;  
    vector<vector<Point3f>> worldPoints;  
   vector<CString> imageArray;
   GetDirFiles(chessdir,imageArray);
   int NImages=imageArray.size();
    //读取图片  
    for(CurrentImage;CurrentImage<NImages;++CurrentImage)  
    {  
        src = imread((LPCTSTR)imageArray[CurrentImage]);  
        //灰  
        cvtColor(src,gray,CV_BGR2GRAY);  
   
        //检测角点  
        imageCorners.clear();  
        findcorner_result = findChessboardCorners(gray,Size(ChessBoardSize_w,ChessBoardSize_h),imageCorners,3);
        if(!findcorner_result){
            DLGPRINT("%s error findChessboardCorners",(LPCTSTR)imageArray[CurrentImage]);
        }else{
            DLGPRINT("%s OK findChessboardCorners",(LPCTSTR)imageArray[CurrentImage]);
        }
        //精确坐标  
        cornerSubPix(gray,imageCorners,Size(10,10),Size(-1,-1),TermCriteria(CV_TERMCRIT_ITER|CV_TERMCRIT_EPS,500,0.003));  
        imagePoints.push_back(imageCorners);  
        //画角点  
       
        //drawChessboardCorners(src,Size(ChessBoardSize_w,ChessBoardSize_h),imageCorners,findcorner_result);
       // imshow("Chess",src);
        //DLGPRINT("print any key to read the next pic");
       // waitKey();
         
    }  
    
    DLGPRINT("开始定标");  
    
    vector<Point3f> objectsCorners;  
    //世界坐标系坐标  
    for(CurrentImage=0;CurrentImage<NImages;CurrentImage++)  
    {  
        for(CurrentRow=0;CurrentRow<ChessBoardSize_h;CurrentRow++)  
            for(CurrentColumn=0;CurrentColumn<ChessBoardSize_w;CurrentColumn++)  
                objectsCorners.push_back(Point3f(CurrentRow*SquareSize,CurrentColumn*SquareSize,0.0));  
        worldPoints.push_back(objectsCorners);  
        objectsCorners.clear();  
    }  
 
    calibrateCamera(worldPoints,imagePoints,Size(ChessBoardSize_w,ChessBoardSize_h),cameraMatrix,distCoeffs,rvecs,tvecs,0);  
    std::cout<<cameraMatrix<<std::endl;  
    std::cout<<distCoeffs<<std::endl;  
 
    for(int i=0;i<NImages;++i)  
    {  
          
        //std::cout<<"第"<<i<<"个图片的旋转向量"<<std::endl;  
        //std::cout<<rvecs[i]<<std::endl;  
        std::cout<<"第"<<i+1<<"个图片的旋转矩阵"<<std::endl;  
        Rodrigues(rvecs[i],rmatrix);  
        std::cout<<rmatrix<<std::endl;  
        std::cout<<"第"<<i+1<<"个图片的平移向量"<<std::endl;  
        std::cout<<tvecs[i]<<std::endl;  
        //开始误差分析  
        double err = 0.0;  
        vector<Point2f>undistortMatrix;  
        projectPoints(worldPoints[i],rmatrix,tvecs[i],cameraMatrix,distCoeffs,undistortMatrix);  
        err = norm(undistortMatrix,imagePoints[i]);  
        std::cout<<"第"<<i+1<<"张图的误差为:"<<err<<std::endl;  
    }  
 
 
    //显示校正后的图片  
    Mat result_image;  
    namedWindow("Undistort_image",0);  
    for(CurrentImage=0;CurrentImage<NImages;CurrentImage++)  
    {  
            Mat srcimage = imread((LPCTSTR)imageArray[CurrentImage]);  
            undistort(srcimage,result_image,cameraMatrix,distCoeffs);  
            imshow("Undistort_image",result_image);  
            DLGPRINT("按任意键显示下一幅图片。。。");  
            waitKey(0);  
   }  
    return (0);  


C:\img\chess\left02.jpg OK findChessboardCorners
C:\img\chess\left04.jpg OK findChessboardCorners
C:\img\chess\left05.jpg OK findChessboardCorners
C:\img\chess\left07.jpg OK findChessboardCorners
C:\img\chess\left09.jpg OK findChessboardCorners
C:\img\chess\left11.jpg OK findChessboardCorners
C:\img\chess\left12.jpg OK findChessboardCorners
C:\img\chess\left13.jpg OK findChessboardCorners
C:\img\chess\left14.jpg OK findChessboardCorners
C:\img\chess\right01.jpg OK findChessboardCorners
C:\img\chess\right02.jpg OK findChessboardCorners
C:\img\chess\right03.jpg OK findChessboardCorners
C:\img\chess\right04.jpg OK findChessboardCorners
C:\img\chess\right05.jpg OK findChessboardCorners
C:\img\chess\right06.jpg OK findChessboardCorners
C:\img\chess\right07.jpg OK findChessboardCorners
C:\img\chess\right09.jpg OK findChessboardCorners
C:\img\chess\right11.jpg OK findChessboardCorners
C:\img\chess\right12.jpg OK findChessboardCorners
C:\img\chess\right13.jpg OK findChessboardCorners
C:\img\chess\right14.jpg OK findChessboardCorners
开始定标
-------------------mat--------------------------
535.678894 0.000000 332.888672 
0.000000 535.432617 242.006912 
0.000000 0.000000 1.000000 
----------------mat end--------------------
-------------------mat--------------------------
-0.300526 0.149802 0.000052 -0.000560 -0.063199 
----------------mat end--------------------
RVECS
-------------------mat--------------------------
-2.408767 
-0.198662 
0.216968 
----------------mat end--------------------
-------------------mat--------------------------
-2.127419 
-2.128250 
0.384843 
----------------mat end--------------------
-------------------mat--------------------------
-0.332933 
-2.935428 
0.701011 
----------------mat end--------------------
-------------------mat--------------------------
2.971486 
0.482567 
-0.509134 
----------------mat end--------------------
-------------------mat--------------------------
1.932370 
2.203017 
0.659829 
----------------mat end--------------------
-------------------mat--------------------------
0.247033 
2.545303 
0.080783 
----------------mat end--------------------
-------------------mat--------------------------
-0.024029 
-3.006202 
0.555750 
----------------mat end--------------------
-------------------mat--------------------------
-0.444715 
-2.875168 
-0.753507 
----------------mat end--------------------
-------------------mat--------------------------
0.274657 
2.710503 
0.283412 
----------------mat end--------------------
-------------------mat--------------------------
-1.996382 
-2.013420 
0.107410 
----------------mat end--------------------
-------------------mat--------------------------
-2.432833 
-0.203065 
0.185693 
----------------mat end--------------------
-------------------mat--------------------------
-1.812542 
-2.596642 
0.526146 
----------------mat end--------------------
-------------------mat--------------------------
-2.157320 
-2.139232 
0.381902 
----------------mat end--------------------
-------------------mat--------------------------
-0.352335 
-2.949382 
0.728299 
----------------mat end--------------------
-------------------mat--------------------------
-3.008670 
-0.158527 
0.680003 
----------------mat end--------------------
-------------------mat--------------------------
2.957859 
0.463191 
-0.471083 
----------------mat end--------------------
-------------------mat--------------------------
1.913895 
2.186117 
0.657637 
----------------mat end--------------------
-------------------mat--------------------------
0.243065 
2.523972 
0.061037 
----------------mat end--------------------
-------------------mat--------------------------
-0.040455 
-3.022564 
0.587618 
----------------mat end--------------------
-------------------mat--------------------------
-0.448522 
-2.907204 
-0.739180 
----------------mat end--------------------
-------------------mat--------------------------
0.270287 
2.691149 
0.264340 
----------------mat end--------------------
tvecs
-------------------mat--------------------------
-19.988886 
23.757114 
135.684052 
----------------mat end--------------------
-------------------mat--------------------------
-27.348545 
-28.622829 
129.982254 
----------------mat end--------------------
-------------------mat--------------------------
27.477587 
-38.877304 
121.149429 
----------------mat end--------------------
-------------------mat--------------------------
-56.649239 
21.068739 
169.330826 
----------------mat end--------------------
-------------------mat--------------------------
-24.510670 
-33.746979 
111.023720 
----------------mat end--------------------
-------------------mat--------------------------
21.140327 
-45.984241 
134.144012 
----------------mat end--------------------
-------------------mat--------------------------
22.560535 
-33.183712 
124.203354 
----------------mat end--------------------
-------------------mat--------------------------
15.558736 
-37.992195 
115.607452 
----------------mat end--------------------
-------------------mat--------------------------
20.203869 
-44.751049 
123.997093 
----------------mat end--------------------
-------------------mat--------------------------
-54.881516 
-41.291859 
155.745651 
----------------mat end--------------------
-------------------mat--------------------------
-56.450920 
27.112652 
133.663742 
----------------mat end--------------------
-------------------mat--------------------------
-40.990997 
-35.479271 
123.890732 
----------------mat end--------------------
-------------------mat--------------------------
-63.884598 
-25.337687 
128.723404 
----------------mat end--------------------
-------------------mat--------------------------
-8.913817 
-36.079464 
121.589745 
----------------mat end--------------------
-------------------mat--------------------------
-18.384424 
39.083179 
160.100708 
----------------mat end--------------------
-------------------mat--------------------------
-93.902374 
25.361036 
166.436279 
----------------mat end--------------------
-------------------mat--------------------------
-60.649311 
-30.763153 
109.916985 
----------------mat end--------------------
-------------------mat--------------------------
-15.546039 
-42.856949 
134.324783 
----------------mat end--------------------
-------------------mat--------------------------
-13.929643 
-30.286358 
124.502472 
----------------mat end--------------------
-------------------mat--------------------------
-20.690454 
-35.141682 
115.443146 
----------------mat end--------------------
-------------------mat--------------------------
-16.215090 
-41.770683 
123.984489 
----------------mat end--------------------


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值