您的位置:首页 > 运维架构

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

2017-04-20 09:18 656 查看
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);
}


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: