文章目錄
- 一、簡單讀取
- 二、視訊屬性
一、簡單讀取
頭檔案
quick_opencv.h
:聲明類與公共函數
#pragma once
#include <opencv2\opencv.hpp>
using namespace cv;
class QuickDemo {
public:
...
void video_Demo(Mat& image);
};
主函數調用該類的公共成員函數
#include <opencv2\opencv.hpp>
#include <quick_opencv.h>
#include <iostream>
using namespace cv;
int main(int argc, char** argv) {
Mat src = imread("D:\\Desktop\\pandas.jpg");
if (src.empty()) {
printf("Could not load images...\n");
return -1;
}
namedWindow("input", WINDOW_NORMAL);
imshow("input", src);
QuickDemo qk;
...
//qk.polyline_drawing_Demo();
qk.video_Demo(src);
waitKey(0);
destroyAllWindows();
return 0;
}
源檔案
quick_demo.cpp
:實作類與公共函數
void QuickDemo::video_Demo(Mat& image) {
VideoCapture captrue("D\\balltest.mp4"); //打開視訊
//VideoCapture captrue(0); //打開相機
Mat frame;
while (true)
{
captrue.read(frame);
if (frame.empty()) {
break;
}
// TODO:各種處理
imshow("frame", frame);
int c = waitKey(10);
if (c == 27) {
break;
}
}
captrue.release();
}
二、視訊屬性
VideoWriter::VideoWriter(
const String & filename, 視訊檔案的路徑名稱
int fourcc, 表示用于編碼視訊檔案的編碼器
double fps, 幀率
Size frameSize, 幀寬高
bool isColor=true 灰階圖像或者是彩色圖像(僅僅在windows上支援)
)
-
fourcc為 四個字元用來表示壓縮幀的codec 例如:
CV_FOURCC(‘P’,‘I’,‘M’,‘1’) = MPEG-1 codec
CV_FOURCC(‘M’,‘J’,‘P’,‘G’) = motion-jpeg codec
CV_FOURCC(‘M’, ‘P’, ‘4’, ‘2’) = MPEG-4.2 codec
CV_FOURCC(‘D’, ‘I’, ‘V’, ‘3’) = MPEG-4.3 codec
CV_FOURCC(‘D’, ‘I’, ‘V’, ‘X’) = MPEG-4 codec
CV_FOURCC(‘U’, ‘2’, ‘6’, ‘3’) = H263 codec
CV_FOURCC(‘I’, ‘2’, ‘6’, ‘3’) = H263I codec
CV_FOURCC(‘F’, ‘L’, ‘V’, ‘1’) = FLV1 codec
若編碼器代号為 -1,則運作時會彈出一個編碼器選擇框.
void QuickDemo::video_Demo(Mat& image) {
VideoCapture captrue("D:\\opencv-c++\\images\\balltest.mp4"); //打開視訊
int frame_width = captrue.get(CAP_PROP_FRAME_WIDTH); // 幀寬
int frame_height = captrue.get(CAP_PROP_FRAME_HEIGHT); // 幀高
int count = captrue.get(CAP_PROP_FRAME_COUNT); // 總幀數
double fps = captrue.get(CAP_PROP_FPS); // 幀率
std::cout<< "frame_width=" << frame_width << std::endl;
std::cout<< "frame_height=" << frame_height << std::endl;
std::cout<< "Number of frames count=" << count << std::endl;
std::cout<< "FPS=" << fps << std::endl;
VideoWriter writer("D:\\Desktop\\test.mp4", captrue.get(CAP_PROP_FOURCC),fps,Size(frame_width,frame_height),true);
Mat frame, hsv;
while (true)
{
captrue.read(frame);
if (frame.empty()) {
break;
}
// TODO:各種處理
cvtColor(frame, hsv, COLOR_BGR2HSV);
imshow("hsv", hsv);
writer.write(hsv);
int c = waitKey(10);
if (c == 27) {
break;
}
}
captrue.release();
writer.release();
}