【2】opencv显示视频及给视频加下滑条

显示视频


```cpp
include <opencv2/opencv.hpp>
#include 
#include 
using namespace cv;
using namespace std;
int main()
{
	namedWindow("video", WINDOW_AUTOSIZE);
	VideoCapture cap;
	cap.open("F://pic.mp4");
	Mat frame;
	for (;;)
	{
		cap >> frame;
		if (frame.empty())
			break;
		imshow("video", frame);
		if (waitKey(33) >= 0)
			break;
	}
}

【2】opencv显示视频及给视频加下滑条_第1张图片
使用opencv显示视频原理上其实和循环差不多,大概就是,我们从一个视频流中获得图片,获得再将图片输出出来后我们就相当于输出了,看代码,videoCaputre其实是定义了一个输入流,这个流可以获得open函数对应地址中的视频文件,获得对应的数据流,然后,可以用Mat形的变量,读入图片信息,我们要不断输入图片不断输出图片,所以我们要用循环装着,一直到没有图片推出,注意我们的一个判断条件waitKey(33);这个判断条件其实是代表着,我显示完图片后,等待33毫秒看,键盘有没有输入,有输入就要推出,其次这个条件也代表了我们显示图片的频率,也就是通常指的帧率

给视频播放器加下滑条

#include 
#include 
#include 
#include 
#include 
using namespace cv;
using namespace std;
int g_slider_position = 0;
int g_run = 1, g_dontset = 0;
VideoCapture 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()
{
	namedWindow("example3", WINDOW_AUTOSIZE);
	g_cap.open("F://pic.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 << "video has" << frames << "frame of dimensions " << tmpw << "," << tmph << endl;
	createTrackbar("position", "example3", &g_slider_position, frames, onTrackbarSlide);
	Mat frame;
	for (;;)
	{
		if (g_run != 0)
		{
			g_cap >> frame;
			if (frame.empty())
				break;
			int current_pos = (int)g_cap.get(CAP_PROP_POS_FRAMES);
			g_dontset = 1;
			setTrackbarPos("position", "example3", current_pos);
			imshow("example3", frame);
			g_run -= 1;
		}
		char c = (char)waitKey(10);
		if (c == 's')
		{
			g_run = 1;
			cout << "songle step, run = " << g_run << endl;
		}
		if (c == 'r')
		{
			g_run = -1;
			cout << "run mode, run = " << g_run << endl;
		}
		if (c == 27)
			break;
	}
	return 0;
}

【2】opencv显示视频及给视频加下滑条_第2张图片
opencv中已经集成了的显示下滑条的函数,可以看一看代码就清楚了,而且生成的下滑条可以直接使用鼠标点击,我们要实现下滑条的滑动,我们要获得对应的帧率信息,因此frames,tmpw,tmph就是用来保存视频帧率,高度,宽度信息的变量,这些信息也可以直接调用函数获得,另外我们还实现了键盘输入r视频直接播放,s是一帧一帧播放两种模式。具体实现代码还是很清晰的。

你可能感兴趣的:(从零开始学计算机视觉C++版)