双目测距----实验

双目标定(二)

2020-01-22  本文已影响0人  Parker2019

取材自己标定

按照官网标定例程,我们需要制作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;
}

对于采集程序的说明

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

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

上一篇 下一篇

猜你喜欢

热点阅读