项目功能实现:获取视频的参数信息,对视频文件进行转换到HSV色域空间并保存到指定路径中去
按照之前的博文结构来,这里就不在赘述了
一、头文件
video_save.h
#pragma once#include<opencv2/opencv.hpp>using namespace cv;class Video_Save {
public:void videosave(Mat& image);
};#pragma once
二、函数实现
video_save.cpp
VideoCapture capture("E:/C++_workspace/a1.mp4");
获取视频信息
frame_width = capture.get(CAP_PROP_FRAME_WIDTH);
得到原始视频的宽度信息
frame_height = capture.get(CAP_PROP_FRAME_HEIGHT);
得到原始视频的高度信息
count = capture.get(CAP_PROP_FRAME_COUNT);
得到原始视频总帧数
fps = capture.get(CAP_PROP_FPS);
得到原始视频的FPS(每秒处理的帧数)
VideoWriter writer("E:/C++_workspace/result.mp4", capture.get(CAP_PROP_FOURCC), fps, Size(frame_width, frame_height), true);
参数一:视频数据信息要保存的路径
参数二:以哪种编码形式进行保存,这里是跟原视频一样
参数三:每秒处理多少帧,这里和原视频一样
参数四:保存视频的大小,这里和原视频一样
参数五:是否是彩色视频数据
cvtColor(frame, result, COLOR_BGR2HSV);
转换色彩空间,对原视频的每帧数据frame进行转换到HSV色域中得到result
writer.write(result);
保存每帧图片,从而形成视频信息
capture.release();
writer.release();
处理完之后进行释放
#include"video_save.h"
#include<iostream>
#include<opencv2/opencv.hpp>void Video_Save::videosave() {//VideoCapture capture(0);//调用系统摄像头VideoCapture capture("E:/C++_workspace/a1.mp4");Mat frame, result;namedWindow("result", WINDOW_FREERATIO);namedWindow("frame", WINDOW_FREERATIO);int frame_width, frame_height, count;double fps;frame_width = capture.get(CAP_PROP_FRAME_WIDTH);frame_height = capture.get(CAP_PROP_FRAME_HEIGHT);count = capture.get(CAP_PROP_FRAME_COUNT);fps = capture.get(CAP_PROP_FPS);std::cout << "frame_width is: " << frame_width << std::endl;std::cout << "frame_height is: " << frame_height << std::endl;std::cout << "count is: " << count << std::endl;std::cout << "fps is: " << fps << std::endl;VideoWriter writer("E:/C++_workspace/result.mp4", capture.get(CAP_PROP_FOURCC), fps, Size(frame_width, frame_height), true);while (true) {capture.read(frame);//flip(frame, frame, 1);//翻转一下if (frame.empty()) {break;}cvtColor(frame, result, COLOR_BGR2HSV);imshow("result", result);imshow("frame", frame);writer.write(result);int c = waitKey(10);if (c == 27) {//Esc退出break;}}capture.release();writer.release();
}
三、主函数
yy_main.cpp
#include <opencv2/opencv.hpp>
#include <iostream>
#include "video_save.h"using namespace cv;
using namespace std;int main(int argc, char** argv) {Video_Save yy;yy.videosave();waitKey(0);destroyAllWindows();return 0;
}
项目结构如下:
运行效果图如下: