OpenCV的 - 让滑块视频播放过程中,以更新其位置 [英] OpenCV - getting the slider to update its position during video playback
本文介绍了OpenCV的 - 让滑块视频播放过程中,以更新其位置的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我拿起学习OpenCV的,并一直在尝试一些code范例/练习。在这个code片段,我想滑块以更新其与每个视频帧变化位置,但由于某种原因,它不会工作(图片具有以下code冻结):
的#includecv.h
#包括highgui.hINT g_slider_position = 0;
CvCapture * g_capture = NULL;无效onTrackbarSlide(INT POS)
{
cvSetCaptureProperty(g_capture,CV_CAP_PROP_POS_FRAMES,POS)
}INT主(INT ARGC,字符** argv的)
{
cvNamedWindow(汤姆'东经杰里展,CV_WINDOW_AUTOSIZE);
g_capture = cvCreateFileCapture(的argv [1]);
诠释帧=(INT)cvGetCaptureProperty(
g_capture,
CV_CAP_PROP_FRAME_COUNT
); 如果(帧!= 0)
{
cvCreateTrackbar(
位置,
汤姆'东经杰里秀,
&安培; g_slider_position,
帧,
onTrackbarSlide
);
} * IplImage结构框架; 而(1)
{
帧= cvQueryFrame(g_capture);
如果(!帧)
打破; cvSetTrackbarPos(
位置,
汤姆'东经杰里秀,
++ g_slider_position
); cvShowImage(汤姆'东经杰里展,帧);
焦C = cvWaitKey(33);
如果(C == 27)
打破;
} cvReleaseCapture(安培; g_capture);
cvDestroyWindow(汤姆'东经杰里展); 返回0;
}
任何想法如何让滑块和视频按预期?工作
解决方案
这是实际工作code//程序添加A更新的TrackBar到视频#包括LT&;&cv.h GT;
#包括LT&;&highgui.h GT;
INT g_slider_position = 0;
CvCapture * video_capture = NULL;无效onTrackbarSlide(INT current_frame)
{
current_frame = g_slider_position;
cvSetCaptureProperty(video_capture,CV_CAP_PROP_POS_FRAMES,current_frame);
}INT主(INT ARGC,字符** argv的)
{
cvNamedWindow(视频,CV_WINDOW_AUTOSIZE);
video_capture = cvCreateFileCapture(Crowdy.avi);
INT no_of_frames =(int)的cvGetCaptureProperty(video_capture,CV_CAP_PROP_FRAME_COUNT);
如果(no_of_frames!= 0)
{
cvCreateTrackbar(滑块,视频,和放大器; g_slider_position,no_of_frames,onTrackbarSlide);
} * IplImage结构框架; 而(1)
{
帧= cvQueryFrame(video_capture);
如果突破(帧!);
cvShowImage(视频,帧);
cvSetTrackbarPos(滑块,视频,++ g_slider_position);
焦C = cvWaitKey(33);
如果(C == 27)破;
}
cvReleaseCapture(安培; video_capture);
cvDestroyWindow(视频); 返回(0);
}
I've picked up 'Learning OpenCV' and have been trying some of the code examples/exercises. In this code snippet, I want to get the slider to update its position with each video frame change, but for some reason it won't work (the picture freezes with the following code):
#include "cv.h"
#include "highgui.h"
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("The Tom 'n Jerry Show", CV_WINDOW_AUTOSIZE);
g_capture = cvCreateFileCapture(argv[1]);
int frames = (int) cvGetCaptureProperty(
g_capture,
CV_CAP_PROP_FRAME_COUNT
);
if (frames != 0)
{
cvCreateTrackbar(
"Position",
"The Tom 'n Jerry Show",
&g_slider_position,
frames,
onTrackbarSlide
);
}
IplImage* frame;
while (1)
{
frame = cvQueryFrame(g_capture);
if (!frame)
break;
cvSetTrackbarPos(
"Position",
"The Tom 'n Jerry Show",
++g_slider_position
);
cvShowImage("The Tom 'n Jerry Show", frame);
char c = cvWaitKey(33);
if (c == 27)
break;
}
cvReleaseCapture(&g_capture);
cvDestroyWindow("The Tom 'n Jerry Show");
return 0;
}
Any idea how to get the slider and video to work as intended?
解决方案
This is the actual working code
// PROGRAM TO ADD A UPDATING TRACKBAR TO A VIDEO
#include <cv.h>
#include <highgui.h>
int g_slider_position = 0;
CvCapture* video_capture = NULL;
void onTrackbarSlide(int current_frame)
{
current_frame = g_slider_position;
cvSetCaptureProperty(video_capture,CV_CAP_PROP_POS_FRAMES,current_frame);
}
int main( int argc, char** argv )
{
cvNamedWindow( "Video", CV_WINDOW_AUTOSIZE );
video_capture = cvCreateFileCapture( "Crowdy.avi");
int no_of_frames = (int) cvGetCaptureProperty(video_capture,CV_CAP_PROP_FRAME_COUNT);
if( no_of_frames!= 0 )
{
cvCreateTrackbar("Slider","Video",&g_slider_position,no_of_frames,onTrackbarSlide);
}
IplImage* frame;
while(1)
{
frame = cvQueryFrame( video_capture );
if( !frame ) break;
cvShowImage( "Video", frame );
cvSetTrackbarPos("Slider","Video",++g_slider_position);
char c = cvWaitKey(33);
if( c == 27 ) break;
}
cvReleaseCapture( &video_capture );
cvDestroyWindow( "Video" );
return(0);
}
这篇关于OpenCV的 - 让滑块视频播放过程中,以更新其位置的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文