张正友相机标定OpenCV实现


使用OpenCV中的calibrateCamera函数进行张正友相机标定,得到相机内参矩阵。
资源截图
代码片段和文件信息
#include “opencv2/core/core.hpp“
#include “opencv2/imgproc/imgproc.hpp“
#include “opencv2/calib3d/calib3d.hpp“
#include “opencv2/highgui/highgui.hpp“
#include 
#include 

using namespace cv;
using namespace std;

enum { DETECTION = 0 CAPTURING = 1 CALIBRATED = 2 };
int main()

    /************************************************************************  
           从摄像机中读取多幅图像从中提取出角点,然后对角点进行亚像素精确化 
    *************************************************************************/ 
int image_count=  10;                    /****    图像数量     ****/  
Mat frame;
Size image_size;                         /****     图像的尺寸      ****/   
Size board_size = Size(96);            /****    定标板上每行、列的角点数       ****/  
vector corners;                  /****    缓存每幅图像上检测到的角点       ****/
vector>  corners_Seq;    /****  保存检测到的所有角点       ****/   
ofstream fout(“calibration_result.txt“);  /**    保存定标结果的文件     **/
int mode = DETECTION;

VideoCapture cap(1);
cap.set(CV_CAP_PROP_frame_WIDTH640);
cap.set(CV_CAP_PROP_frame_HEIGHT480);
if(!cap.isOpened()){
std::cout<<“打开摄像头失败,退出“;
exit(-1);
}
namedWindow(“Calibration“);
    std::cout<<“Press ‘g‘ to start capturing images!“<
int count = 0n=0;
stringstream tempname;
string filename;
int key;
string msg;
int baseLine;
Size textSize;
while(n < image_count )
{
frame.setTo(0);
cap>>frame;
if(mode == DETECTION)
{
key = 0xff & waitKey(30);
if( (key & 255) == 27 )
break;

if( cap.isOpened() && key == ‘g‘ )
{
mode = CAPTURING;
}
}

if(mode == CAPTURING)
{
key = 0xff & waitKey(30);
if( (key & 255) == 32 )
{
image_size = frame.size();
/* 提取角点 */   
Mat imageGray;
cvtColor(frame imageGray  CV_RGB2GRAY);
bool patternfound = findChessboardCorners(frame board_size cornersCALIB_CB_ADAPTIVE_THRESH + CALIB_CB_NORMALIZE_IMAGE + CALIB_CB_FAST_CHECK );
if (patternfound)   
{    
n++;
tempname< tempname>>filename;
filename+=“.jpg“;
/* 亚像素精确化 */
cornerSubPix(imageGray corners Size(11 11) Size(-1 -1) TermCriteria(CV_TERMCRIT_EPS + CV_TERMCRIT_ITER 30 0.1));
count += corners.size();
corners_Seq.push_back(corners);
imwrite(filenameframe);
tempname.clear();
filename.clear();
}
else
{
std::cout<<“Detect Failed.
“;
}
}
}
msg = mode == CAPTURING ? “100/100/s“ : mode == CALIBRATED ? “Calibrated“ : “Press ‘g‘ to start“;
baseLine = 0;
textSize = getTextSize(msg 1 1 1 &baseLine);
Point textOrigin(frame.cols - 2*textSize.width - 10 frame.rows - 2*baseLine - 10);

if( mode == CAPTURING )
{
msg = format( “%d/%d“nimage_count);
}

putText( frame msg textOrigin 1 1mode != CALIBRATED ? Scalar(00255) : Scalar(02550));

imshow(“Calibration“frame);
key = 0xff & waitKey(1);

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件      60360  2015-07-30 11:09  calibrationcalibration1.jpg

     文件      61121  2015-07-30 11:11  calibrationcalibration10.jpg

     文件      61229  2015-07-30 11:10  calibrationcalibration2.jpg

     文件      61537  2015-07-30 11:10  calibrationcalibration3.jpg

     文件      64177  2015-07-30 11:10  calibrationcalibration4.jpg

     文件      59513  2015-07-30 11:10  calibrationcalibration5.jpg

     文件      62833  2015-07-30 11:11  calibrationcalibration6.jpg

     文件      77115  2015-07-30 11:11  calibrationcalibration7.jpg

     文件      66128  2015-07-30 11:11  calibrationcalibration8.jpg

     文件      59704  2015-07-30 11:11  calibrationcalibration9.jpg

     文件       4449  2015-07-27 15:06  calibrationcalibrationcalibration.vcxproj

     文件        941  2015-07-27 14:44  calibrationcalibrationcalibration.vcxproj.filters

     文件        410  2015-07-27 18:06  calibrationcalibrationcalibration.vcxproj.user

     文件          0  2015-08-31 11:53  calibrationcalibrationcalibration_result.txt

     文件         96  2015-07-30 00:33  calibrationcalibrationDebugcalibration.lastbuildstate

     文件       2230  2015-07-30 00:33  calibrationcalibrationDebugcalibration.log

     文件        736  2015-07-30 00:33  calibrationcalibrationDebugcl.command.1.tlog

     文件      15812  2015-07-30 00:33  calibrationcalibrationDebugCL.read.1.tlog

     文件        516  2015-07-30 00:33  calibrationcalibrationDebugCL.write.1.tlog

     文件          2  2015-07-30 00:33  calibrationcalibrationDebuglink-cvtres.read.1.tlog

     文件          2  2015-07-30 00:33  calibrationcalibrationDebuglink-cvtres.write.1.tlog

     文件          2  2015-07-30 00:33  calibrationcalibrationDebuglink-rc.read.1.tlog

     文件          2  2015-07-30 00:33  calibrationcalibrationDebuglink-rc.write.1.tlog

     文件          2  2015-07-30 00:33  calibrationcalibrationDebuglink.10904-cvtres.read.1.tlog

     文件          2  2015-07-30 00:33  calibrationcalibrationDebuglink.10904-cvtres.write.1.tlog

     文件          2  2015-07-30 00:33  calibrationcalibrationDebuglink.10904-rc.read.1.tlog

     文件          2  2015-07-30 00:33  calibrationcalibrationDebuglink.10904-rc.write.1.tlog

     文件          2  2015-07-30 00:33  calibrationcalibrationDebuglink.10904.read.1.tlog

     文件          2  2015-07-30 00:33  calibrationcalibrationDebuglink.10904.write.1.tlog

     文件          2  2015-07-30 00:33  calibrationcalibrationDebuglink.11096-cvtres.read.1.tlog

............此处省略134个文件信息

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件举报,一经查实,本站将立刻删除。

发表评论

评论列表(条)