参考学习opencv的个人笔记,
【练习:关于在读取视频时让滚动条随着视频的播放而动】
心得:视频显示的规律是刷新图片,实现滚动条随视频的播放而动就是在刷新图片的同时刷新对应滚动条中滑块的位置。
#include<stdio.h>
#include<cv.h>
#include <opencv2/core/core_c.h>
#include <opencv2/highgui/highgui_c.h>
int g_slider_position = 0;
CvCapture*g_capture = NULL;
void onTrackbarSlider(int pos) //回调函数
{
cvSetCaptureProperty(g_capture, CV_CAP_PROP_POS_FRAMES, pos); //用pos返回g_capture所指向的文件的下一帧的位置
}
int main()
{
g_capture = cvCreateFileCapture("借.avi"); //读入视频文件
IplImage *fram;
cvNamedWindow("你猜呀", CV_WINDOW_AUTOSIZE); //创建文件窗口
int frames = (int)cvGetCaptureProperty(g_capture, CV_CAP_PROP_FRAME_COUNT);//获取视频总的帧数,对于原始的avi文件读取的比较准确,要是对于转换的avi文件
//建议用 cvQueryFrame函数读取准确,也建议在使用cvGetCaptureProperty之前先调用一遍cvQueryFrame函数,详情见引用http://blog.youkuaiyun.com/u013500944/article/details/18561411http://blog.youkuaiyun.com/u013500944/article/details/18561411。
if (frames != 0)
{
cvCreateTrackbar("position", "你猜呀", &g_slider_position, frames, onTrackbarSlider); //创建滚动条,默认在顶部
}
while (1) //显示每一帧的图像
{
fram = cvQueryFrame(g_capture);
g_slider_position = (int)cvGetCaptureProperty(g_capture, CV_CAP_PROP_POS_FRAMES);//实现对每个图片对应的滚动条滑块的位置的定位
cvSetTrackbarPos("position", "你猜呀", g_slider_position);
if (!fram) break;
cvShowImage("你猜呀", fram);
char c = cvWaitKey(33);
if (c == 27) break;
}
cvReleaseCapture(&g_capture); //退出,释放内存
cvDestroyWindow("你猜呀");
}