2017-04-03 38 views
-1

我寫的教程教科書下面的代碼:代碼複製一個到一個從教科書也絕對沒有什麼

#include <opencv/highgui.h> 
#include <opencv/cv.h> 
using namespace cv; 


/* 

Displays a video with a trackbar 

*/ 


int   g_slider_position = 0; 
CvCapture* g_capture   = NULL; 

void onTrackbarSlide(int pos){ 
    cvSetCaptureProperty(
     g_capture, 
     CV_CAP_PROP_POS_FRAMES, 
     pos 
    ); 

} 

int main(int argc, char** argv){ 
    cvNamedWindow("Example 3", CV_WINDOW_AUTOSIZE); 
    g_capture = cvCreateFileCapture(argv[1]); 
    int frames = (int) cvGetCaptureProperty(
     g_capture, 
     CV_CAP_PROP_FRAME_COUNT 
    ); 
    if(frames!= 0){ 
     cvCreateTrackbar(
      "Position", 
      "Example 3", 
      &g_slider_position, 
      frames, 
      onTrackbarSlide 
     ); 
    } 
    IplImage* frame; 
    return (0); 
} 

和除using namespace cv;和評論,這是一個對一個,每字符。我編譯它與此:

g++ CVB--02-TrackBarVid.cpp -o CVB--02-TrackBarVid `pkg-config --cflags --libs opencv` 

當我用一個短的動畫視頻剪輯運行它......絕對沒有發生任何事情。它應該用滾動條來顯示視頻,而更令人感到奇怪的是,一個早期的播放視頻的程序運行良好,即使我改變了它,視頻只有640x480。

這裏可能會出現什麼問題?

回答

1

您提供的代碼實際上做了一些事情,但並不多 - 它顯示一個名爲「Example 3」的空窗口並立即退出。

它會檢查視頻中的幀數並將其放入frames變量中。如果提供的視頻文件中有任何幀,它將創建一個軌跡欄。但之後沒有任何反應。此代碼缺乏像從視頻文件中獲取幀的視頻處理。你可以看到有一個指針IplImage* frame;,它沒有初始化,程序以return (0);結束。至少應該是從0(第一幀)到frames-1(最後一幀)的循環,從視頻中獲取每幀並將其放到「示例3」窗口。

此代碼看起來像一個壞的「複製 - 粘貼」或東西...

+0

是的,就是這樣:我誤以爲在這本書作爲指令註釋,而不是一個提示*填寫失蹤編碼自己*。謝謝你澄清對我來說,你真的幫了忙。 – Rich

相關問題