opencv双目测距的简单代码实现

本文分享了作者在研究双目视觉过程中遇到的问题与解决经验,包括摄像头固定、标定板设计、图片采集距离的注意事项。程序实现主要基于OpenCV库,参照官方示例进行标定和匹配。尽管作者自认水平有限,但希望能为初学者提供参考。
摘要由CSDN通过智能技术生成

今年五月份开始研究双目,从刚开始的无从下手到渐渐熟悉,再到中途的想放弃,也算是历经波折,在此我把我自己东拼西凑的东西分享一下,算是我在CSDN成长的一个见证。首先说下遇到的问题:

  1. 两个摄像头之间必须固定,不然不可能标定成功。
  2. 标定板的数目尽量不要出现横排竖列相等的情况。
  3. 采集图片的时候不要离摄像头太远。
#include <opencv2/opencv.hpp>
#include <iostream>

using namespace cv;
using namespace std;

VideoCapture capl;
VideoCapture capr;
Mat imgl, imgr,imgl_bm,imgr_bm;
Mat framel, framer,image;
Mat disp, disparityImage, pointClouds;
Mat R, T, R1, P1, R2, P2;
Mat M1, D1, M2, D2;
Mat Q,xyz;
float scale = 1.f;
const char* intrinsic_filename = "intrinsics.yml";
const char* extrinsic_filename = "extrinsics.yml";
Ptr<StereoBM> bm = StereoBM::create(16, 9);
Rect roi1, roi2;
int numberOfDisparities = 0, SADWindowSize = 0;
int pic_info[4];
bool left_mouse = false;
void updatecalibdata()
{
    cout << "开始加载标定参数。" << endl;
    FileStorage fs(intrinsic_filename, FileStorage::READ);
    if (!fs.isOpened())
    {
        printf("Failed to open file %s\n", intrinsic_filename);
        //return -1;
    }

    //Mat M1, D1, M2, D2;
    fs["M1"] >> M1;
    fs[&
  • 5
    点赞
  • 45
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值