双目测距--2 准备双目图像 (用于标定)

现在手上的设备是HBV-1780-2 单USB双目摄像头,还是大哥借给我用的。

下面是该设备的读取图像代码,可以用这份代码用来拍摄用于标定的棋盘图像

说明:按下s键会保存当前图像,按q键盘会推出。

#include <iostream>
#include <iomanip>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/videoio/videoio.hpp>

using namespace cv;
using namespace std;

VideoCapture cap(0);

void Pre_Camra(){
    cap.set(CAP_PROP_FRAME_WIDTH, 1280);
    cap.set(CAP_PROP_FRAME_HEIGHT, 480);
    cap.set(CAP_PROP_FPS, 30);
}


class pre{
private:
    Mat Pic_All;
    Mat Pic_Left;
    Mat Pic_Right;
public:
    pre(){}
    void pic_device(Mat img);
    Mat pic_left_return();
    Mat pic_right_return();
    void show();
    ~pre(){}
}Pre_process;

void pre::pic_device(Mat img)
{
    Pic_All = img.clone();
    Pic_Left = img(Rect(Point(0,0), Point(img.cols/2, img.rows))).clone();
    Pic_Right = img(Rect(Point(img.cols/2, 0), Point(img.cols, img.rows))).clone();
}

Mat pre::pic_left_return()
{
    return Pic_Left;
}

Mat pre::pic_right_return()
{
    return Pic_Right;
}

void pre::show()
{
    imshow("left", Pic_Left);
    imshow("right", Pic_Right);
    imshow("all", Pic_All);
}





int currentIndex = 0;
void writerNextFrame(Mat & left, Mat& right,
                     int numberOfdigits= 2,
                     string extension = ".png",
                     string outputPath="/home/jason/work/01-img/"){
    stringstream ss;
    string LorR;

    LorR="left";
    ss << outputPath << LorR <<std::setfill('0')
       << std::setw(numberOfdigits)
       << currentIndex
       << extension;
    imwrite(ss.str(), left);
    cout<<ss.str()<<endl;

    LorR="right";
    ss.clear();
    ss.str("");
    ss << outputPath << LorR <<std::setfill('0')
       << std::setw(numberOfdigits)
       << currentIndex++
       << extension;
    cout<<ss.str()<<endl;
    imwrite(ss.str(),right);
}

int main()
{
    stringstream ss;
    string extension=".png";
    string outputFileName="/home/jason/work/01-img/";



    Pre_Camra();
    Mat zong, left, right;
    char key;

    while (1) {
        cap >> zong;
        Pre_process.pic_device(zong);
        Pre_process.show();

        key = (char)waitKey(1);
        if (key =='s')
        {
            left = Pre_process.pic_left_return();
            right = Pre_process.pic_right_return();
            writerNextFrame(left, right);
        }
        else if (key == 'q')
        {
            cout << "****** A total of  " << (currentIndex+1)*2
                 << " pictures are saved ******" << endl;
            break;
        }

    }

    cap.release();

    return 0;
}

效果:

参考:

C++_Opencv 4.0+_读取_双目摄像头_hbv-1780-2 s2.0_StobestaR的博客-CSDN博客

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值