#include <opencv2/opencv.hpp>
#include<opencv2/highgui/highgui.hpp>
using namespace cv;
using namespace std;
#define WINDOW_NAME_ORIGINAL "[原视频]" //为窗口标题定义的宏
全局变量/
VideoCapture g_capture;
int g_slider_position = 0;
int cur_frame = 0; //增加全局变量,指示g_capture的当前帧
onTrackbarSlide/
void onTrackbarSlide(int pos,void*)
{
if (pos != cur_frame) //如果回调函数onTrackbarSlide(int pos)中当前的函数参数pos与全局变量相等,
//说明是滚动条自动移动造成的调用,不必重新设置g_capture的当前帧。。
{
g_capture.set(CV_CAP_PROP_POS_FRAMES, pos);
}
}
main()函数
int main(int argc, char** agrv)
{
namedWindow(WINDOW_NAME_ORIGINAL, CV_WINDOW_AUTOSIZE);
g_capture.open("1.mov");
int frames = g_capture.get(CV_CAP_PROP_FRAME_COUNT);
char TrackbarName[50];
sprintf(TrackbarName, "帧数值 %d", frames);
if (frames != 0)
{
createTrackbar(TrackbarName, WINDOW_NAME_ORIGINAL, &g_slider_position, frames, onTrackbarSlide);
};
Mat frame;
while (1)
{
g_capture.read(frame);
if (!g_capture.grab()) break;
imshow(WINDOW_NAME_ORIGINAL, frame);
cur_frame = g_capture.get(CV_CAP_PROP_POS_FRAMES);//提取当前帧
setTrackbarPos(TrackbarName, WINDOW_NAME_ORIGINAL, cur_frame);
char c = (char)
waitKey(50);
if (c == 27) break;
}
return 0;
}
引用:http://blog.sina.com.cn/s/blog_4b826e5b01015xoj.html
根据C 版本改写