环境:ubuntu16.04 + opencv3.3.0
该代码是根据 Learing Opencv 3第十八章标定示例代码修改的。
先上代码:
#include <opencv2/opencv.hpp>
#include <iostream>
using namespace std;
using namespace cv;
void help( ) {
cout<<"输入参数示例如下:./xxx 9 6 10 1 \n"
<<"参数解释如下:\n"
<<" ./xxx是生成的可执行文件\n 9是棋盘中每一行的内角点数\n"
<<" 6是棋盘中每一列的内角点数\n 10表示拍摄十张图片进行标定\n"
<<" 1表示图片缩放比例(默认是0.5,此参数不一定要输入)"<<endl;
}
/**
* @brief main 从摄像头获取图像并标定最后用于矫正图片
* @param argc
* @param argv 传入的参数分别为棋盘格子的列数、行数、需要多少张图片、图片缩放比例`(非必须)
* @return
*/
int main(int argc, char* argv[]) {
//初始化棋盘参数
int n_boards = 0; // Will be set by input list
float image_sf = 0.5f;
int board_w = 0;
int board_h = 0;
if(argc < 4 || argc > 5) {
cout << "\nERROR: Wrong number of input parameters";
help();
return -1;
}
board_w = atoi( argv[1] ); //atoi时间ASCII码转化为int型
board_h = atoi( argv[2] );
n_boards = atoi( argv[3] );
if( argc > 4 ) image_sf = atof( argv[4] ); //atoi时间ASCII码转化为float型
int board_n = board_w * board_h;
cv::Size board_sz = cv::Size( board_w, board_h );
//打开摄像头
cv::VideoCapture capture(0);
if( !capture.isOpened() ) {
cout << "\nCouldn't open the camera\n";
return -1;
}
// ALLOCATE STORAGE
//
vector< vector<cv::Point2f> > image_points;
vector< vector&l