我从教程教科书中写了以下代码:
#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。
这里可能出现什么问题?
答案 0 :(得分:1)
您提供的代码实际上做了一些事情,但并不多 - 它显示一个名为&#34的空窗口;示例3&#34;并立即退出。
它的作用是检查视频中的帧数并将其放入frames
变量中。如果提供的视频文件中有任何帧,则会创建一个轨迹栏。但之后没有任何反应。此代码缺少视频处理,例如从视频文件中获取帧。您可以看到有一个声明为IplImage* frame;
的指针未被初始化,程序以return (0);
结束。至少应该有一个从0(第一帧)到frames-1
(最后一帧)的循环,从视频中取出每一帧并将其放到&#34;示例3&#34;窗口。
这段代码看起来很糟糕&#34; copy-paste&#34;什么......