使用视差图的距离(opencv)

时间:2016-10-01 09:22:49

标签: c++ opencv

我正在开发一个OpenCV项目(c ++)。基本上我的目标是通过视差图估计实际距离。 现在我已经计算了差异(最大差异 - 因为我感兴趣的对象是离摄像机最近的对象),所以现在我该如何计算距离。我得到的差异值是1264,我的焦距是大约28毫米。 使用公式D = b * f / d {b = 60 mm,f = 28 mm,d = 1264像素} 'D'出来是1.38单位,而我的实际距离是150厘米。无论单位数值都是错误的! :/。 我到底哪里错了? 任何帮助表示赞赏。

我写的代码: (C ++& Opencv 3.1)

#include<iostream>

#include<opencv2/opencv.hpp>

using namespace std;

using namespace cv;


int main() {

Mat left, right, dis;

float b = 6, f = 2.8, d, pd = 104;
left = imread("leftm.jpg", IMREAD_GRAYSCALE);

right = imread("rightm.jpg", IMREAD_GRAYSCALE);
imshow("or", right);

blur(left, left, Size(5, 5), Point(-1, -1));
blur(right, right, Size(5, 5), Point(-1, -1));


Ptr<StereoBM> sbm = StereoBM::create(16 * 5, 21);

sbm->compute(left, right, dis);
double min, max;
erode(dis, dis, Mat(), Point(-1, -1), 3);

//dilate(dis, dis, Mat(), Point(-1, -1), 1);

minMaxLoc(dis, &min, &max);
dis.convertTo(dis, CV_8UC1, .45);



imshow("disparity", dis);
cout << "disparity beaches!!!!"<<endl;
cout << "max disparity :" << max << endl;
d = max;
cout << " => distance = " << (((b*f) / d)*pd)*100<<" cm"<<endl;
waitKey(0);
return 0;
}

0 个答案:

没有答案