资源简介

使用OpenCV中的函数,进行张正友相机标定的程序 ,包含样例数据

资源截图

代码片段和文件信息


#include “opencv.hpp“

#include 
#include 
#include   
#include   
#include   
#include

using namespace cv;
using namespace std;

/* 
@param File_Directory 为文件夹目录
@param FileType 为需要查找的文件类型
@param FilesName 为存放文件名的容器
*/
void getFilesName(string &File_Directory string &FileType vector&FilesName)
{
string buffer = File_Directory + “\\*“ + FileType;

_finddata_t c_file;   // 存放文件名的结构体

long hFile;
hFile = _findfirst(buffer.c_str() &c_file);   //找第一个文件命

if (hFile == -1L)   // 检查文件夹目录下存在需要查找的文件
printf(“No %s files in current directory!\n“ FileType);
else
{
string fullFilePath;
do
{
fullFilePath.clear();

//名字
fullFilePath = File_Directory + “\\“ + c_file.name;

FilesName.push_back(fullFilePath);

} while (_findnext(hFile &c_file) == 0);  //如果找到下个文件的名字成功的话就返回0否则返回-1  
_findclose(hFile);
}
}

void m_calibration(vector &FilesName Size board_size Size square_size Mat &cameraMatrix Mat &distCoeffs vector &rvecsMat vector &tvecsMat)
{
ofstream fout(“caliberation_result.txt“);                       // 保存标定结果的文件 

cout << “开始提取角点………………“ << endl;
int image_count = 0;                                            // 图像数量 
Size image_size;                                                // 图像的尺寸 

vector image_points;                                   // 缓存每幅图像上检测到的角点
vector> image_points_seq;                       // 保存检测到的所有角点

for (int i = 0;i < FilesName.size();i++)
{
image_count++;

// 用于观察检验输出
cout << “image_count = “ << image_count << endl;
Mat imageInput = imread(FilesName[i]);
if (image_count == 1)  //读入第一张图片时获取图像宽高信息
{
image_size.width = imageInput.cols;
image_size.height = imageInput.rows;
cout << “image_size.width = “ << image_size.width << endl;
cout << “image_size.height = “ << image_size.height << endl;
}

/* 提取角点 */
bool ok = findChessboardCorners(imageInput board_size image_points CV_CALIB_CB_ADAPTIVE_THRESH | CV_CALIB_CB_NORMALIZE_IMAGE);
if (0 == ok)
{
cout <<“第“<< image_count <<“张照片提取角点失败,请删除后,重新标定!“< imshow(“失败照片“ imageInput);
waitKey(0);
}
else
{
Mat view_gray;
cout << “imageInput.channels()=“ << imageInput.channels() << endl;
cvtColor(imageInput view_gray CV_RGB2GRAY);

/* 亚像素精确化 */
//find4QuadCornerSubpix(view_gray image_points Size(5 5)); //对粗提取的角点进行精确化
cv::cornerSubPix(view_gray image_points cv::Size(11 11) cv::Size(-1 -1) cv::TermCriteria(CV_TERMCRIT_ITER + CV_TERMCRIT_EPS 20 0.01));

image_points_seq.push_back(image_points);  //保存亚像素角点
   
/* 在图像上显示角点位置 */
drawChessboardCorners(view_gray board_size image_points true); 

//imshow(“Camera Calibration“ view_gray);//显示图片
//waitKey(100);//暂停0.1S
}
}
cout << “角点提取完成!!!“ << endl;


/*棋盘三维信息*/
vector

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     目录           0  2017-08-02 09:36  Calibration_multi\
     目录           0  2017-07-11 10:08  Calibration_multi\.vs\
     目录           0  2017-07-11 10:08  Calibration_multi\.vs\Calibration_multi\
     目录           0  2017-07-11 10:08  Calibration_multi\.vs\Calibration_multi\v14\
     文件       25600  2017-07-31 15:01  Calibration_multi\.vs\Calibration_multi\v14\.suo
     目录           0  2017-07-31 14:58  Calibration_multi\Calibration_multi\
     文件        7387  2017-07-11 20:31  Calibration_multi\Calibration_multi\Calibration_multi.vcxproj
     文件         945  2017-07-11 20:31  Calibration_multi\Calibration_multi\Calibration_multi.vcxproj.filters
     目录           0  2017-07-11 10:08  Calibration_multi\Calibration_multi\Debug\
     目录           0  2017-07-11 10:08  Calibration_multi\Calibration_multi\Debug\Calibrat.FB4906BE.tlog\
     文件         215  2017-07-11 10:08  Calibration_multi\Calibration_multi\Debug\Calibrat.FB4906BE.tlog\Calibration_multi.lastbuildstate
     文件           3  2017-07-11 10:08  Calibration_multi\Calibration_multi\Debug\Calibration_multi.log
     文件           0  2017-07-31 14:58  Calibration_multi\Calibration_multi\caliberation_result.txt
     文件        8029  2017-08-02 09:35  Calibration_multi\Calibration_multi\main.cpp
     目录           0  2017-07-11 20:31  Calibration_multi\Calibration_multi\x64\
     目录           0  2017-07-31 14:58  Calibration_multi\Calibration_multi\x64\Debug\
     目录           0  2017-07-31 14:58  Calibration_multi\Calibration_multi\x64\Debug\Calibrat.FB4906BE.tlog\
     文件         622  2017-07-31 14:58  Calibration_multi\Calibration_multi\x64\Debug\Calibrat.FB4906BE.tlog\CL.command.1.tlog
     文件       28364  2017-07-31 14:58  Calibration_multi\Calibration_multi\x64\Debug\Calibrat.FB4906BE.tlog\CL.read.1.tlog
     文件         500  2017-07-31 14:58  Calibration_multi\Calibration_multi\x64\Debug\Calibrat.FB4906BE.tlog\CL.write.1.tlog
     文件         198  2017-07-31 14:58  Calibration_multi\Calibration_multi\x64\Debug\Calibrat.FB4906BE.tlog\Calibration_multi.lastbuildstate
     文件        1268  2017-07-31 14:58  Calibration_multi\Calibration_multi\x64\Debug\Calibrat.FB4906BE.tlog\link.command.1.tlog
     文件        2972  2017-07-31 14:58  Calibration_multi\Calibration_multi\x64\Debug\Calibrat.FB4906BE.tlog\link.read.1.tlog
     文件         486  2017-07-31 14:58  Calibration_multi\Calibration_multi\x64\Debug\Calibrat.FB4906BE.tlog\link.write.1.tlog
     文件        1039  2017-07-31 14:31  Calibration_multi\Calibration_multi\x64\Debug\Calibration_multi.Build.CppClean.log
     文件        1838  2017-07-31 14:58  Calibration_multi\Calibration_multi\x64\Debug\Calibration_multi.log
     文件     2065527  2017-07-31 14:58  Calibration_multi\Calibration_multi\x64\Debug\main.obj
     文件     1149952  2017-07-31 14:58  Calibration_multi\Calibration_multi\x64\Debug\vc140.idb
     文件     2306048  2017-07-31 14:58  Calibration_multi\Calibration_multi\x64\Debug\vc140.pdb
     文件    15495168  2017-07-31 15:01  Calibration_multi\Calibration_multi.VC.db
     文件        1333  2017-07-11 10:08  Calibration_multi\Calibration_multi.sln
............此处省略20个文件信息

评论

共有 条评论