MP4转.JPG
#include<opencv2\opencv.hpp>
#include <iostream>
#include <stdio.h>
#include<fstream> using namespace std;
using namespace cv;//獲取視頻中的人臉int main()
{//打開視頻文件:其實(shí)就是建立一個(gè)VideoCapture結(jié)構(gòu) VideoCapture capture("new.mp4");//檢測(cè)是否正常打開:成功打開時(shí),isOpened返回ture if (!capture.isOpened())cout << "fail toopen!" << endl;//獲取整個(gè)幀數(shù) long totalFrameNumber = capture.get(CV_CAP_PROP_FRAME_COUNT);cout << "整個(gè)視頻共" << totalFrameNumber << "幀" << endl;//設(shè)置開始幀() long frameToStart = 1;capture.set(CV_CAP_PROP_POS_FRAMES, frameToStart);cout << "從第" << frameToStart << "幀開始讀" << endl;//設(shè)置結(jié)束幀 int frameToStop = totalFrameNumber;if (frameToStop < frameToStart){cout << "結(jié)束幀小于開始幀,程序錯(cuò)誤,即將退出!" << endl;return -1;}else{cout << "結(jié)束幀為:第" << frameToStop << "幀" << endl;}//獲取幀率 double rate = capture.get(CV_CAP_PROP_FPS);cout << "幀率為:" << rate << endl;//定義一個(gè)用來控制讀取視頻循環(huán)結(jié)束的變量 bool stop = false;//承載每一幀的圖像 Mat frame;//顯示每一幀的窗口 namedWindow("Extractedframe");//兩幀間的間隔時(shí)間: //int delay = 1000/rate; double delay = 1000 / rate;//利用while循環(huán)讀取幀 //currentFrame是在循環(huán)體中控制讀取到指定的幀后循環(huán)結(jié)束的變量 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;}cout << "正在讀取第" << currentFrame << "幀" << endl;imshow("Extractedframe", frame);cout << "正在寫第" << currentFrame << "幀" << endl;stringstream str;str << "face//"<<currentFrame << ".jpg";cout << str.str() << endl;//waitKey(intdelay=0)當(dāng)delay≤ 0時(shí)會(huì)永遠(yuǎn)等待;當(dāng)delay>0時(shí)會(huì)等待delay毫秒 //當(dāng)時(shí)間結(jié)束前沒有按鍵按下時(shí),返回值為-1;否則返回按鍵 //int c = waitKey(delay);int c = waitKey(10);//按下ESC或者到達(dá)指定的結(jié)束幀后退出讀取視頻 if ((char)c == 27 || currentFrame > frameToStop){stop = true;}//按下按鍵后會(huì)停留在當(dāng)前幀,等待下一次按鍵 if (currentFrame % 5==0)imwrite(str.str(), frame);currentFrame = currentFrame + 1;}//關(guān)閉視頻文件 capture.release();return 0;
}
總結(jié)
- 上一篇: 获取最大轮廓 opencv
- 下一篇: [2] SSD配置+训练VOC0712+