2014-03-05 60 views
0

我試圖實現幀差分法進行背景扣除。問題是當我嘗試在窗口中顯示幀差異。我逼債得到任何輸出[黑色窗口]。這是代碼實現幀差分法[背景減法]

#include <highgui.h> 
#include <iostream> 
using namespace cv; 

int main() 
{ 

    VideoCapture cap("Camouflage/b%05d.bmp"); 
    if(!cap.isOpened()) 
    { 
     std::cout<<"failed to open image sequence"; 
     return 1; 
    } 
    char c; 
    Mat frame1, frame2, frame3; 
    namedWindow("Original Frames",1); 
    namedWindow("Frame Difference",1); 
    while(1) 
    { 
     cap>>frame1; 
     if(frame1.empty()) 
     { 
      std::cout<<"Frame1Message->End of sequence"<<std::endl; 
      break; 
     } 
     cap>>frame2; 
     if(frame2.empty()) 
     { 
      std::cout<<"Frame2Message->End of sequence"<<std::endl; 
      break; 
     } 
     // absdiff(frame1,frame2,frame3); 

     frame3=frame1.clone(); 
     frame3=frame3-frame2; 
     //imwrite("C:/Users/hp/Desktop/file 
     imshow("Frame Difference",frame3); 
     c=waitKey(90); 
     if(c==27) 
      break; 

     imshow("Original Frames",frame1); 
     c=waitKey(90); 
     if(c==27)   
      break; 
    } 
} 

任何人都可以幫我嗎?..讀音字卡住。

UPDATE

VideoCapture並沒有爲我,所以我使用cvCapture工作。我認爲它不會讀取圖像序列,但它worked.This是我做過什麼

CvCapture* capture = cvCreateFileCapture("Camouflage/b%05d.bmp"); 

圖像名稱可以是任何類似b00000,b00010,b00001等。

+0

frame3中的值可能非常小。嘗試imshow(「Frame Difference」,frame3 * 100); – berak

+0

剛試過。獲得相同的輸出。 –

回答

0

您正在打開帶有VideoCapture的bmp文件。嘗試一個視頻,但在兩個幀之間沒有延遲捕獲可能會導致一些問題。

+0

我讀取逐幀讀取的圖像序列。反正它不適用於視頻。 –