OpenCV入坑備忘2——讀取視頻、調整進度

Tips:暫時留坑,等深入理解後再續寫

1、讀取視頻並播放

#include<iostream>
#include<opencv2/opencv.hpp>

using namespace cv;
using namespace std;

VideoCapture VCap;//視頻容器

int main()
{
	VCap.open("./test.mp4");//打開根目錄下的視頻文件,VideoCapture結構被初始化
	if (!VCap.isOpened())//判斷是否初始化/讀取成功。與.open相關聯(先後順序)
		return -1;//如是,關閉程序

	Mat frame;//定義爲Mat類,作爲一個可以保存視頻幀的結構
	while(1)
	{
		VCap >> frame;//從視頻容器中讀取數據
		//VCap.read(frame);//從視頻或攝像頭在捕獲下一幀,並輸出給指定對象
		if (frame.empty())//檢測是否讀取完成,如完成,則跳出循環
			break;
		imshow("新寶島【猛男版】", frame);
		waitKey(3); //控制播放速度,作延時用
	}
	destroyWindow("新寶島【猛男版】");//關閉播放窗口,釋放內存
	return 0;
}

其他成員功能,可參照
1、OpenCV官方文檔
2、opencv視頻操作基礎—VideoCapture類
3、learning opencv 3 第八章內容

2、給視頻添加進度條

Tip:如果實時反饋播放進度,會造成視頻播放卡頓,原因不明

#include<iostream>
#include<opencv2/opencv.hpp>
#include<fstream>

using namespace cv;
using namespace std;

char response;
bool g_bpause = false;
int g_sliderposition = 0;


VideoCapture VCap;//視頻容器



void onTrackbarSlide(int pos, void*)
{
	g_bpause = true;
	VCap.set(CAP_PROP_POS_FRAMES, pos);//設置跳轉的幀
	g_bpause = false;
}

int main()
{
	VCap.open("./test.mp4");//打開根目錄下的視頻文件
//	VCap.open(0);//打開根目錄下的視頻文件
	if (!VCap.isOpened())//判斷是否讀取成功。與.open相關聯
		return -1;//如是,關閉程序


	//創建一個滑動條,
	int nFrames = (int)VCap.get(CAP_PROP_FRAME_COUNT);//獲取視頻最大幀數
	int nWidth = (int)VCap.get(CAP_PROP_FRAME_WIDTH);
	int nHeight = (int)VCap.get(CAP_PROP_FRAME_HEIGHT);
	namedWindow("OpenCV3", WINDOW_AUTOSIZE);
	createTrackbar(
		"Position", "OpenCV3",
		&g_sliderposition, //整數指針,反饋滑塊當前位置
		nFrames,//當前視頻最大幀數,最小值爲0
		onTrackbarSlide//回調函數
	);


	Mat frame;
	while(1)
	{
//		VCap >> frame;
		VCap.read(frame);
		if (frame.empty())//檢測是否讀取完成,如完成,則跳出循環
			break;
		int current_pos = (int)VCap.get(CAP_PROP_POS_FRAMES);//獲得接下來需要解碼的幀
		setTrackbarPos("Position", "OpenCV3", current_pos);//在滑動條中顯示播放進度

		imshow("新寶島【猛男版】", frame);
		waitKey(1); //控制播放速度
	}

	destroyWindow("新寶島【猛男版】");//關閉播放窗口,釋放內存
	return 0;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章