我正在开发一个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;
}