从教科书中一对一复制的代码绝对没有任何意义

时间:2017-04-03 04:42:04

标签: c++ opencv video

我从教程教科书中写了以下代码:

#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 个答案:

答案 0 :(得分:1)

您提供的代码实际上做了一些事情,但并不多 - 它显示一个名为&#34的空窗口;示例3&#34;并立即退出。

它的作用是检查视频中的帧数并将其放入frames变量中。如果提供的视频文件中有任何帧,则会创建一个轨迹栏。但之后没有任何反应。此代码缺少视频处理,例如从视频文件中获取帧。您可以看到有一个声明为IplImage* frame;的指针未被初始化,程序以return (0);结束。至少应该有一个从0(第一帧)到frames-1(最后一帧)的循环,从视频中取出每一帧并将其放到&#34;示例3&#34;窗口。

这段代码看起来很糟糕&#34; copy-paste&#34;什么......