opencv视频控制的滚动条

nicewonders 2010-08-20 05:04:57
在看学习opencv,看到视频控制的一个例子,很迷惑。
我想让滚动条控制视频的播放(avi文件),滚动条拉到哪,就能从哪播放,用帧控制的方法,对于什么时候会调用onTrackbarSlide,参数的传递,整不明白了,下面有程序的整体框架。
哪位朋友能指点下,最好有能运行的程序,谢谢。

#include <highgui.h>
#include <cv.h>
#include <iostream>
using namespace std;

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("2_3",CV_WINDOW_AUTOSIZE);
if (argc!=2){
cout<<"请输入程序参数,运行方式:程序名 path"<<endl;
return 0;
}
g_capture = cvCreateFileCapture(argv[1]);
int frames = (int)cvGetCaptureProperty(g_capture,CV_CAP_PROP_FRAME_COUNT);
if (frames != 0){
cvCreateTrackbar("Position",
"2_3",
&g_slider_position,
frames,
onTrackbarSlide
);
}
IplImage* frame;
while(1){
frame=cvQueryFrame(g_capture);
if (!frame) break;
cvShowImage("2_3",frame);
//控制语句应该在这里吧?
//?cvSetTrackbarPos("Position","2_3",);
char c = cvWaitKey(33);
if(c == 27) break;
}
cvReleaseCapture(&g_capture);
cvDestroyWindow("2_3");
return 0;
}
...全文
520 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
RockyStar 2012-03-12
  • 打赏
  • 举报
回复
楼主给出的程序里的问题是不能让滚动条随着视频的播放跟着走,滚动条是静止的.只有拖动的时候才有用.如果把cvSetTrackbarPos()函数加上,画面就静止了.而trackbar可以自己走.
不知道你们是怎么解决这个问题的.
libing64 2011-10-18
  • 打赏
  • 举报
回复
记住三点:函数,消息,映射
这里函数是:void onTrackbarSlide(int pos);
消息是在点击trackbar时系统产生,
映射在trackbar创建时已经设好,cvCreateTrackbar("Position",
"2_3",
&g_slider_position,
frames,
onTrackbarSlide
);
在点击trackbar有消息产生,此时就会由系统调用映射的函数。
大鱼炖海棠 2011-10-15
  • 打赏
  • 举报
回复
路过 同求
nicewonders 2010-08-24
  • 打赏
  • 举报
回复
#include <highgui.h>
#include <cv.h>
#include <iostream>
using namespace std;

int g_slider_position = 0;
CvCapture* g_capture = NULL;

void onTrackbarSlide(int pos){
cvSetCaptureProperty(
g_capture,
CV_CAP_PROP_POS_FRAMES,
pos
);
cvSetTrackbarPos( "Position", "2_3", pos );
}
int main(int argc, char** argv){
cvNamedWindow("2_3",CV_WINDOW_AUTOSIZE);
if (argc!=2){
cout<<"请输入程序参数,运行方式:程序名 path"<<endl;
return 0;
}
g_capture = cvCreateFileCapture(argv[1]);
int frames = (int)cvGetCaptureProperty(g_capture,CV_CAP_PROP_FRAME_COUNT);
if (frames != 0){
cvCreateTrackbar("Position",
"2_3",
&g_slider_position,
frames,
onTrackbarSlide
);
}
IplImage* frame;
while(1){
frame=cvQueryFrame(g_capture);
if (!frame) break;
cvShowImage("2_3",frame);
char c = cvWaitKey(33);
if(c == 27) break;
}
cvReleaseCapture(&g_capture);
cvDestroyWindow("2_3");
return 0;
}

19,468

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 图形处理/算法
社区管理员
  • 图形处理/算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧