基于Opencv的几种立体匹配算法+ELAS

该博客介绍了基于OpenCV的立体匹配算法,包括BM、SGBM、VAR以及ELAS,并提供了相关参数设置参考。作者分享了源代码资源,供读者在CSDN上下载学习。
摘要由CSDN通过智能技术生成

http://blog.csdn.net/chuhang_zhqr/article/details/51179881类似,采用
这里写图片描述

这里写图片描述
这两个经典的图片进行测试。

关于BM和SGBM以及VAR的参数设置请参考
晨宇思远

本文代码基于opencv2.4.9
本文源码地址在我的CSDN代码资源:
http://download.csdn.net/detail/chuhang_zhqr/9703763

0:ELAS
这里要去下载Elas的开源库函数。

int StereoMatch::ElasMatch()
{
    cv::Mat disp_l,disp_r,disp8u_l,disp8u_r;
    double minVal; double maxVal; //视差图的极值

    cv::Mat leftImage = cv::imread("../test_images/leftr31.png",0);
    cv::Mat rightImage = cv::imread("../test_images/rightr31.png",0);

    // 计算视差
    // generate disparity image using LIBELAS
    int bd = 0;
    const int32_t dims[3] = {leftImage.cols,leftImage.rows,leftImage.cols};
    cv::Mat leftdpf = cv::Mat::zeros(cv::Size(leftImage.cols,leftImage.rows), CV_32F);
    cv::Mat rightdpf = cv::Mat::zeros(cv::Size(leftImage.cols,leftImage.rows), CV_32F);
    Elas::parameters param;
    param.postprocess_only_left = false;
    Elas elas(param);
    elas.process(leftImage.data,rightImage.data,leftdpf.ptr<float>(0),rightdpf.ptr<float>(0),dims);

    cv::Mat(leftdpf(cv::Rect(bd,0,leftImage.cols,leftImage.rows))).copyTo(disp_l);
    cv::Mat(rightdpf(cv::Rect(bd,0,rightImage.cols,rightImage.rows))).copyTo(disp_r);

    //-- Check its extreme values
    cv::minMaxLoc( disp_l, &minVal, &maxVal );
    cout<<"Min disp: Max value"<< minVal<<maxVal; //numberOfDisparities.= (maxVal - minVal)

    //-- Display it as a CV_8UC1 image
    disp_l.convertTo(disp8u_l, CV_8U, 255/(maxVal - minVal));//(numberOfDisparities*16.)

    cv::minMaxLoc( disp_r, &minVal, &maxVal );
    cout<<"Min disp: Max value"<< minVal<<maxVal; //numberOfDisparities.= (maxVal - minVal)

    //-- Display it as a CV_8UC1 image
    disp_r.convertTo(disp8u_r, CV_8U, 255/(maxVal - minVal));//(numberOfDisparities*16.)

    cv::normalize(disp8u_l, disp8u_l, 0, 255, CV_MINMAX, CV_8UC1);    // obtain normalized image
    cv::normalize(disp8u_r, disp8u_r, 0, 255, CV_MINMAX, CV_8UC1);    // obtain normalized image

    cv::imshow("Left",leftImage);
    cv::imshow("Right",rightImage);

    cv::imshow("Elas_left",disp8u_l);
    cv::imshow("Elas_right",disp8u_r);
    cv::imwrite("Elas_left.png",disp8u_l);
    cv::imwrite("Elas_right.png",disp8u_r);

    cout<<endl<<"Over"<<endl;
    cv::waitKey(0);

    return 0;
}

1:BM算法

int StereoMatch::BMMatching()
{
    cv::Mat disp,disp8u;
    double minVal; double maxVal; //视差图的极值

    cv::Mat leftImage = cv::imread("../test_images/leftr.png",0);
    cv::Mat rightImage = cv::imread("../test_images/rightr.png",0);

    int SADWindowSize = 19;
  • 3
    点赞
  • 63
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值