VideoCapture类
生活随笔
收集整理的這篇文章主要介紹了
VideoCapture类
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>
#include <iostream>using namespace std;
using namespace cv;int main()
{//打開視頻文件:其實就是建立一個VideoCapture結構VideoCapture capture("D:/videos/PetsD2TeC2.avi");//檢測是否正常打開:成功打開時,isOpened返回tureif(!capture.isOpened())cout<<"fail to open!"<<endl;//獲取整個幀數long totalFrameNumber = capture.get(CV_CAP_PROP_FRAME_COUNT);cout<<"整個視頻共"<<totalFrameNumber<<"幀"<<endl;//設置開始幀()long frameToStart = 300;capture.set( CV_CAP_PROP_POS_FRAMES,frameToStart);cout<<"從第"<<frameToStart<<"幀開始讀"<<endl;//設置結束幀int frameToStop = 400;if(frameToStop < frameToStart){cout<<"結束幀小于開始幀,程序錯誤,即將退出!"<<endl;return -1;}else{cout<<"結束幀為:第"<<frameToStop<<"幀"<<endl;}//獲取幀率double rate = capture.get(CV_CAP_PROP_FPS);cout<<"幀率為:"<<rate<<endl;//定義一個用來控制讀取視頻循環結束的變量bool stop = false;//承載每一幀的圖像Mat frame;//顯示每一幀的窗口namedWindow("Extracted frame");//兩幀間的間隔時間://int delay = 1000/rate;int delay = 1000/rate;//利用while循環讀取幀//currentFrame是在循環體中控制讀取到指定的幀后循環結束的變量long currentFrame = frameToStart;//濾波器的核int kernel_size = 3;Mat kernel = Mat::ones(kernel_size,kernel_size,CV_32F)/(float)(kernel_size*kernel_size);while(!stop){//讀取下一幀if(!capture.read(frame)){cout<<"讀取視頻失敗"<<endl;return -1; }//這里加濾波程序imshow("Extracted frame",frame);filter2D(frame,frame,-1,kernel);imshow("after filter",frame);cout<<"正在讀取第"<<currentFrame<<"幀"<<endl;//waitKey(int delay=0)當delay ≤ 0時會永遠等待;當delay>0時會等待delay毫秒//當時間結束前沒有按鍵按下時,返回值為-1;否則返回按鍵int c = waitKey(delay);//按下ESC或者到達指定的結束幀后退出讀取視頻if((char) c == 27 || currentFrame > frameToStop){stop = true;}//按下按鍵后會停留在當前幀,等待下一次按鍵if( c >= 0){waitKey(0);}currentFrame++;}//關閉視頻文件capture.release();waitKey(0);return 0;
}
總結
以上是生活随笔為你收集整理的VideoCapture类的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 反序列化(层序)
- 下一篇: 获取最大轮廓 opencv