//Mat停留太久会卡住,转到Mat定义处
然后把Mat类和
//上面一大截注释之间加一个空格(直接删除也可以)这样鼠标放在Mat上时就不会有注释预览了。
// Show_Video.cpp: 定义控制台应用程序的入口点。
//A simple example OpenCV program for playing a video file from disk
//A simple example OpenCV program for playing a video file from disk
#include "stdafx.h"
#include<opencv2/highgui/highgui.hpp>
#include<opencv2/imgproc/imgproc.hpp>
#include<iostream>
#include<fstream> //文件操作头文件
#include<opencv2/highgui/highgui.hpp>
#include<opencv2/imgproc/imgproc.hpp>
#include<iostream>
#include<fstream> //文件操作头文件
using namespace cv;
using namespace std;
using namespace std;
/*
int main()
{
namedWindow("Example2",WINDOW_AUTOSIZE); //创建一个可变大小的窗口
VideoCapture cap; //创建一个视频捕捉对象
int main()
{
namedWindow("Example2",WINDOW_AUTOSIZE); //创建一个可变大小的窗口
VideoCapture cap; //创建一个视频捕捉对象
cap.open("D:\\BaiduNetdiskDownload\\中国特色社会主义领导核心理论.mp4"); //打开对应路径下的图片
Mat frame; //定义图像帧frame
for (;;) //可以用while(1) 代替, 开始读取视频帧,并连续播放
{
cap >> frame; //载入图像
if (frame.empty()) break; //播放完毕退出
imshow("Example2", frame); //把图像填充到窗口Example2里
//以33ms的速度显示图像帧,即每秒30帧的速度
if (waitKey(33) >= 0) break; //如果播放过程中有按键按下,直接退出
}
return 0;
}
*/
//改进版本,添加进度条
for (;;) //可以用while(1) 代替, 开始读取视频帧,并连续播放
{
cap >> frame; //载入图像
if (frame.empty()) break; //播放完毕退出
imshow("Example2", frame); //把图像填充到窗口Example2里
//以33ms的速度显示图像帧,即每秒30帧的速度
if (waitKey(33) >= 0) break; //如果播放过程中有按键按下,直接退出
}
return 0;
}
*/
//改进版本,添加进度条
int g_slider_position = 0;
int g_run = 1, g_dontset=0;//start out in single step mode
VideoCapture g_cap; //创建全局变量g_cap,视频捕捉对象
void onTrackbarSlide(int pos,void *) {
g_cap.set(CAP_PROP_POS_FRAMES,pos);
if (!g_dontset)
g_run = 1;
g_dontset = 0;
}
int main(int argc, char **argv) {
namedWindow("Video_show1.2",WINDOW_AUTOSIZE); //初始化,创建一个窗口,可随着图片大小自由变化
int g_run = 1, g_dontset=0;//start out in single step mode
VideoCapture g_cap; //创建全局变量g_cap,视频捕捉对象
void onTrackbarSlide(int pos,void *) {
g_cap.set(CAP_PROP_POS_FRAMES,pos);
if (!g_dontset)
g_run = 1;
g_dontset = 0;
}
int main(int argc, char **argv) {
namedWindow("Video_show1.2",WINDOW_AUTOSIZE); //初始化,创建一个窗口,可随着图片大小自由变化
g_cap.open("D:\\BaiduNetdiskDownload\\中国特色社会主义领导核心理论.mp4"); //打开对应路径下的文件
//读入文件的信息: 总帧数、每张图片的宽和高
int frames = (int)g_cap.get(CAP_PROP_FRAME_COUNT);
int tmpw = (int)g_cap.get(CAP_PROP_FRAME_WIDTH);
int tmph = (int)g_cap.get(CAP_PROP_FRAME_HEIGHT);
//输出视频的帧数以及尺寸大小
cout << "Videos has " << frames << " frames of dimensions(" << tmpw << "×" << tmph << ")" << endl;
//为窗口创建进度条
//初始位于0,一共的帧数,当前位置随着画面移动而改变
createTrackbar("Position","Video_show1.2",&g_slider_position,frames,onTrackbarSlide);
//如果没有加入自定义函数无法实现各种按键的功能,或者说不连续,有BUG
// createTrackbar("Position", "Video_show1.2", &g_slider_position, frames);
Mat frame; //创建Mat类的一个图像帧对象
int frames = (int)g_cap.get(CAP_PROP_FRAME_COUNT);
int tmpw = (int)g_cap.get(CAP_PROP_FRAME_WIDTH);
int tmph = (int)g_cap.get(CAP_PROP_FRAME_HEIGHT);
//输出视频的帧数以及尺寸大小
cout << "Videos has " << frames << " frames of dimensions(" << tmpw << "×" << tmph << ")" << endl;
//为窗口创建进度条
//初始位于0,一共的帧数,当前位置随着画面移动而改变
createTrackbar("Position","Video_show1.2",&g_slider_position,frames,onTrackbarSlide);
//如果没有加入自定义函数无法实现各种按键的功能,或者说不连续,有BUG
// createTrackbar("Position", "Video_show1.2", &g_slider_position, frames);
Mat frame; //创建Mat类的一个图像帧对象
for (;;) //开始读取视频
{
if (g_run != 0)
{
g_cap >> frame; //载入图片
if (frame.empty())
break; //播放完毕退出
{
if (g_run != 0)
{
g_cap >> frame; //载入图片
if (frame.empty())
break; //播放完毕退出
int currrent_pos = (int)g_cap.get(CAP_PROP_POS_FRAMES);//当前进度条位置
g_dontset = 1;
g_dontset = 1;
//设置当前位置与图像帧的位置相对应
setTrackbarPos("Position","Video_show1.2", currrent_pos);
imshow("Video_show1.2",frame);
setTrackbarPos("Position","Video_show1.2", currrent_pos);
imshow("Video_show1.2",frame);
g_run -= 1;
}
}
//按键功能: 's':单步运行 ;'r':直接运行; “esc”;直接退出
char c = (char)waitKey(10);
if (c == 's')//single mode
{
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)
break;
}
return 0;
}
char c = (char)waitKey(10);
if (c == 's')//single mode
{
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)
break;
}
return 0;
}