【图像处理】基于opencv3.0使用StereoBM计算视差

来源:互联网 发布:儿童安全座椅 知乎 编辑:程序博客网 时间:2024/06/01 08:21

OpenCV在版本3.0之后发生了较大变化,比如sift特征以及立体匹配等等,基于OpenCV2.3.1版本使用StereoBM计算视差(戳这里)在3.0版本中StereoBM的变化:,
(1)StereoBM定义为了纯虚类,不能直接实例化了,只能使用智能指针的形式实例化
(2)视差值的类型为CV_16S,所以最终要得到真实的视差值还需要转到 CV_32F;
(3)StereoBM的参数需要使用setter和getter方法来设置、获取。

1.环境

opencv库:3.0.0
系统:win10 64位

2.StereoBM的使用

void calDisparity(const IplImage * left, const IplImage * right, Mat & disparity){    Mat _left = cvarrToMat(left); //IplImage *转Mat    Mat _right = cvarrToMat(right);    Rect leftROI, rightROI;    cv::Ptr<cv::StereoBM> bm = cv::StereoBM::create(16, 9);    bm->setPreFilterType(CV_STEREO_BM_XSOBEL);  //CV_STEREO_BM_NORMALIZED_RESPONSE或者CV_STEREO_BM_XSOBEL    bm->setPreFilterSize(9);    bm->setPreFilterCap(31);    bm->setBlockSize(15);    bm->setMinDisparity(0);    bm->setNumDisparities(64);    bm->setTextureThreshold(10);    bm->setUniquenessRatio(5);    bm->setSpeckleWindowSize(100);    bm->setSpeckleRange(32);    bm->setROI1(leftROI);    bm->setROI2(rightROI);    copyMakeBorder(_left, _left, 0, 0, 80, 0, IPL_BORDER_REPLICATE);  //防止黑边    copyMakeBorder(_right, _right, 0, 0, 80, 0, IPL_BORDER_REPLICATE);    bm->compute(_left, _right, disparity);    disparity = disparity.colRange(80, _left.cols);    disparity.convertTo(disparity, CV_32F, 1.0 / 16);}

这里写图片描述

0 0
原创粉丝点击