2011-09-13 135 views
2

我正在使用OpenCV並嘗試將高斯模糊應用於傳入的視頻流。我基本上使用cvQueryFrame刪除一個框架,模糊它,並顯示在屏幕上的框架。但事情是,在我應用模糊之後,我的視頻卡在第一幀上了....任何人都知道爲什麼?它基本上顯示一幀而不是視頻。第二我刪除模糊開始輸出視頻了。OpenCV視頻編輯?

#include "cv.h" 
#include "highgui.h" 
#include "cvaux.h" 

#include <iostream> 
using namespace std; 

int main() 
{ 

//declare initial data 
IplImage *grabCapture= 0; //used for inital video frame capture 
IplImage *process =0; //used for processing 
IplImage *output=0; //displays final output 

CvCapture* vidStream= cvCaptureFromCAM(0); 

cvNamedWindow ("Output", CV_WINDOW_AUTOSIZE); 

int createimage=1; 

while (1) 
{ 

grabCapture= cvQueryFrame (vidStream); 

if (createimage==1) 
    { 
     process= cvCreateImage (cvGetSize(grabCapture), IPL_DEPTH_16U, 3); 

     createimage=0; 

    } 

*process=*grabCapture; 
cvSmooth (process,process,CV_GAUSSIAN,7,7); //line that makes it display frame instead of video 


cvShowImage("Output",process); 

} 


//clean up data 
cvReleaseImage (&grabCapture); 
cvReleaseImage (&process); 
cvReleaseImage (&output); 
cvReleaseCapture (&vidStream); 


return 0; 

}

回答

1

你缺少cvWaitKey通話。這是告訴OpenCV處理事件並防止GUI凍結的唯一方法。

嘗試加入這一行:

cvWaitKey(10); 

cvShowImage("Output",process);後。

編輯:這裏是cvWaitKey

+0

感謝文檔,而不是cvwaitkey()只爲用戶輸入? 爲什麼只需要處理圖像? 謝謝:) – fdh

+0

這就是名字所暗示的,但它也用於事件處理。看看我鏈接到的文檔中的註釋。不知道爲什麼這樣做,但。請記住,highgui無意成爲完整的視窗系統。順便問一下,你是否解決了這個問題? –

+0

好吧謝謝你的幫助:)是的,它確實解決了問題:)只有一個問題我的視頻滯後很多是否有視頻實時?如同增加高斯模糊的速度一樣?謝謝 – fdh