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;
}