视频滑动条窗口源码如下:
#include "opencv2\highgui\highgui.hpp"
#include "opencv2/imgproc/imgproc.hpp"?
#include <iostream>?
#include <fstream>?
using namespace std;
int g_slider_position = 0;? ? ? // 滑动条的位置
int g_run = 1, g_dontset = 0; //start out in single step mode
cv::VideoCapture g_cap;
void onTrackbarSlide(int pos, void*) {
? ? g_cap.set(cv::CAP_PROP_POS_FRAMES, pos);? ?//真正使进度条移动到我们希望的位置
? ? if (!g_dontset)
? ? ? ? g_run = 1;
? ? g_dontset = 0;
}
int main(int argc, char** argv)
{
? ? cv::namedWindow("Example2_4", cv::WINDOW_AUTOSIZE);
? ? g_cap.open(string(argv[1]));
? ? int frames = (int)g_cap.get(cv::CAP_PROP_FRAME_COUNT);
? ? int tmpw = (int)g_cap.get(cv::CAP_PROP_FRAME_WIDTH);
? ? int tmph = (int)g_cap.get(cv::CAP_PROP_FRAME_HEIGHT);
? ? cout << "Video has "<<frames<<" frames of dimensions("<<tmpw<<", "<<tmph <<")."<<endl;
? ? cv::createTrackbar("Position", "Example2_4", &g_slider_position, frames, onTrackbarSlide);
? ??
? ? cv::Mat frame;
? ? for (;;) {
? ? ? ? if (g_run != 0)
? ? ? ? {
? ? ? ? ? ? g_cap >> frame;
? ? ? ? ? ? if (frame.empty())break;
? ? ? ? ? ? int current_pos = (int)g_cap.get(cv::CAP_PROP_POS_FRAMES);
? ? ? ? ? ? g_dontset = 1;
? ? ? ? ? ? cv::setTrackbarPos("Position", "Example2_4", current_pos);
? ? ? ? ? ? cv::imshow("Example2_4", frame);
? ? ? ? ? ? g_run -= 1;
? ? ? ? }
? ? ? ? char c = (char)cv::waitKey(10);
? ? ? ? if (c == 's')//single step
? ? ? ? {
? ? ? ? ? ? g_run = 1;
? ? ? ? ? ? cout << "Single step,run =" << g_run << endl;
? ? ? ? }
? ? ? ? if (c == 'r')//run mode
? ? ? ? {
? ? ? ? ? ? g_run = -1; cout << "Run mode,run=" << g_run << endl;
? ? ? ? }
? ? ? ? if (c == 27)? // Esc 按键
? ? ? ? ? ? break;
? ? }
? ??
? ? return 0;
}
?