2014-01-15 86 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