2014-01-15 85 views
0
using namespace std; 
using namespace cv; 

int main(int argc, char**argv) 
{ 
    long lframecount=0; 
    //load the videos 
    VideoCapture capture1(argv[1]); 
    VideoCapture capture2(argv[2]); 
    cout << argv[1] << endl; 
    cout << argv[2] << endl; 

    if(!capture1.isOpened()||!capture2.isOpened()) 
    { 
     cout<<"cant load stereo video"; 
     return -1; 
    } 

    Mat frame1,frame2; 
    capture1>> frame1; 
    capture2>> frame2; 
    long framecount1= capture1.get(CV_CAP_PROP_FRAME_COUNT); 
    long framecount2= capture2.get(CV_CAP_PROP_FRAME_COUNT); 



    namedWindow("depthmap",cv::WINDOW_NORMAL); 


    cv::Mat disp; 
    cv::Mat vdisp; 
    for(long i=1;i<5;i++) 
    { 
     lframecount++; 
     int number=lframecount; 
     string frame; 
     std::ostringstream convert; 
     convert<<number; 
     frame = convert.str(); 
     //cout<<lframecount<<"\n"; 
     capture1 >> frame1; 
     capture2 >> frame2; 
     cv::StereoVar stereo; 

     stereo.minDisp=-80; 
     stereo.maxDisp=80; 
     stereo(frame1,frame2,disp); 
     double min, max; 
     minMaxLoc(disp, &min, &max); 
     disp.convertTo(vdisp, CV_8U, -255.0/max, 255); 

     std::cout<<"framecount :"<< frame<<std::endl; 
     imshow("depthmap",vdisp); 
     waitKey(30); 
     write << vdisp; 
     //waitKey(30); 
     //if(waitKey(0)) 
     //break; 
    } 
    write.release(); 
    cv::destroyAllWindows(); 
    return 0; 
} 

这是我的code.I在图像中得到很多噪音。我使用从我的相机拍摄的图像。任何人都可以给我一个好方法吗?或者任何人都可以指出错误吗?我正在使用stereo var函数在opencv中可用。其他函数会给出更好的结果吗?如何获得准确的深度图?

+1

请发布您的图片。 – kkuilla

+0

我无法发布我的照片..怎么办? – kadu

+0

把它放在其他服务器上,并张贴到它的链接 – phyrox

回答

0

我建议你使用cvFindStereoCorrespondenceBM

但首先的功能:你有校准你的相机?

也许你应该检查如何将相机使用的OpenCV和this关于计算深度图校准this教程(也称为视差图)。

+0

没有校准,我们也可以得到图像纠正正确??我使用冲浪功能获得基本矩阵,反过来我发现了纠正的形象..现在我想获得差距map.i使用cv :: findStereoCorrespondanceBM,但我无法得到正确的结果。图像中有很多噪音。拍摄图像时是否有任何考虑?// – kadu

+0

您是否正在使用立体视觉矫正一幅图像?如果是这样,也许你应该考虑修改你的问题,并包括确切的问题。 – phyrox