OpenCV读取视频问题
下面代码:
#include "stdafx.h"
#include"highgui.h"
#include"cv.h"
int g_slider_position=0;
CvCapture *g_capture=NULL;
void onTrackbarSlide(int pos){cvSetCaptureProperty(g_capture,CV_CAP_PROP_POS_FRAMES,pos);}
int _tmain(int argc, _TCHAR* argv[])
{
cvNamedWindow("chase",CV_WINDOW_AUTOSIZE);
g_capture=cvCreateFileCapture("D:\\chase.avi");
int frames = (int) cvGetCaptureProperty(g_capture,CV_CAP_PROP_FRAME_COUNT);
if( frames!= 0 ) cvCreateTrackbar("Position","chase",&g_slider_position,frames,onTrackbarSlide);
IplImage* frame;
while(1)
{
frame=cvQueryFrame(g_capture);
if(!frame)break;
cvShowImage("chase",frame);
char c=cvWaitKey(30);
if(c==27)break;
}
cvReleaseCapture(&g_capture);
cvDestroyWindow("chase");
return 0;
}
我想问的是:
视频在播放时,程序应该在while里面循环。
那它这个是怎么在我用鼠标调整播放位置时,点出while()循环的?
[解决办法]
用线程和消息吧,很容易实现。直接while循环好像不好实现。
[解决办法]
char c=cvWaitKey(30);这里的30应该改成一个变量。这样就可以改变等候时间,即改变播放速度。
#include "cv.h"
#include "highgui.h"
#include<stdio.h>
void trun(int pos);
int speed;
int main()
{
char c;
CvCapture* capture = cvCreateFileCapture( "1.avi" );
cvNamedWindow( "Video", CV_WINDOW_AUTOSIZE );
IplImage* frame;
speed = 33;
cvCreateTrackbar("speed", "Video", &speed, 1000, trun);
while( 1 )
{
frame = cvQueryFrame( capture );
if( !frame ) break;
cvShowImage( "Video", frame );
c = cvWaitKey(speed);
if( c==27 ) break;
}
cvReleaseCapture( &capture );
cvDestroyWindow( "Video" );
return 0;
}
void trun( int pos )
{
//nothing
}
当你移动滑动条时,speed的值就会跟着改变。这样就实现调速了。