双目标定(二)

取材自己标定

按照官网标定例程,我们需要制作20对左右的棋盘图

take_pictures.cpp

#include <opencv2/opencv.hpp>
#include <string>
using namespace cv;
int main(){
    VideoCapture capture(0);
    capture = VideoCapture(CV_CAP_DSHOW);
    capture.set(CV_CAP_PROP_FOURCC, CV_FOURCC('M', 'J', 'P', 'G'));
    capture.set(CV_CAP_PROP_FRAME_WIDTH,1280);
    capture.set(CV_CAP_PROP_FRAME_HEIGHT,480);
    int key;
    int i=0;    //图片数
    int j=0;    //视频数
    char picture_left_name[100];//左视图图片文件名
    char picture_right_name[100]; //右视图图片文件名
    char vName[100];//视频文件名    
    while(1){ 
    Mat src_frame;//源帧

    Mat image_left,image_right; //双目左右视图
    Rect left_rect(0,0,640,480); //左框图
    Rect right_rect(640,0,640,480); //右框图

    //namedWindow("Camera");
    capture>>src_frame;
    //此步在于分离左右视图,并将其存入image_left与image_right
    //方便标定使用
    //opencv的stereoCalib是分左右单目标定,分离方便标定
    image_left = Mat(src_frame,left_rect).clone();
    image_right = Mat(src_frame,right_rect).clone();

    if((key=waitKey(33))!=-1){

        //按P键拍照
        if(key=='p' || key == 'P'){ 
            sprintf(picture_left_name,"photos/left%d.jpg",i);
            imwrite(picture_left_name, image_left);
            sprintf(picture_right_name,"photos/right%d.jpg",i);
            imwrite(picture_right_name,image_right);  
            while(key==waitKey(33)==-1);
            i++;
        }



        //视频录制,按V键录制
        // if(key=='v' || key == 'V'){
        //     destroyWindow("Camera");
        //     sprintf(vName,"video/%d.avi",j);    
        //     //写入视频格式avi
        //     VideoWriter writer(vName, CV_FOURCC('M', 'J', 'P', 'G'), 25.0, Size(640, 480));
        //     do
        //     {   
        //     capture>>src_frame;
        //     writer<<src_frame;
        //     imshow("Record",src_frame);
        //     }
        //     while((key=waitKey(33))==-1);
        //     j++;
        //     destroyWindow("Record");
        // }
    }
    imshow("Left",image_left);
    imshow("right",image_right);
    char esc_key = (char)waitKey(33);
    if(esc_key == 27 || esc_key == 'q' || esc_key == 'Q')
    break;
    }
return 0;
}

对于采集程序的说明

  • 相机首先要摆好(水平)
  • 需要在take_pictures.exe同级目录下建立photos文件夹
  • 可能需要编译完成后在运行,此程序最好不要直接点击调试运行(有一定几率按P键拍不了照)。
  • 按P键拍照,照片是成对存放在photos目录下,Q键退出程序。
  • 标定选用的照片质量好,则标定的结果误差小。
  • 将选好的照片路径添加到stereo_calib.xml中。

运行stereo_calib.exe按照双目标定(一)中的内容进行标定即可生成内参和外参矩阵文件。intrinsics.yml,extrinsics.yml

注意:标定选取的照片对数为奇数对!!!

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容