昨晚试验了例程中13幅棋盘角点的校正试验,发现之前的世界坐标系写得不对,横纵坐标改过后就行了。
(1)左右图角点检测和单目标定
// 左图
std::vector<std::string> filelist;
vector<Mat> Imgsrc_l; // 左图象列表
char str[100];
Imgcorner.swap(vector<Point2f>()); // 清空原内容
for(i=1;i<15;i++) // 列表赋值
{
if(i==10)
continue;
sprintf(str,"E:\\MyProgram\\2016年7月起\\TestCamera2\\TestCamera2\\image2\\left%02d.jpg",i);
filelist.push_back(str);
}
// 打开、检测
for(i=0;i<boardsize.height;i++)
for(j=0;j<boardsize.width;j++)
Objcorner.push_back(Point3f(25.0*i,25.0*j,0.0)); //
高前宽后,虽然坐标是先横坐标,但要不这样结果就不对,而且要先宽循环。
for(i=0;i<filelist.size();i++)
{
Im_src=imread(filelist[i],0);
//Mat src;
//cvtColor(Im_src,src,CV_GRAY2RGB);
Imgsrc_l.push_back(Im_src);
bool findresult=findChessboardCorners(Im_src,boardsize,Imgcorner);
cornerSubPix(Im_src, Imgcorner, Size(11, 11), Size(-1, -1),TermCriteria(CV_TERMCRIT_EPS | CV_TERMCRIT_ITER, 30, 0.1));
if(Imgcorner.size()==boardsize.area()) // 若检测到的点数吻合,添加到列表中。