本文主要是介绍OpenCV:VideoWriter视频录制,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
示例代码:
/************************************************************************
* @ Creator:OYXL
* @ Project Creation time:2018/5/24
* @ Function:OpenCV录制视频
* @ Attention:需要按ESC才能完整录制视频,直接停止调试录制的视频是没有时间的
************************************************************************/
#include "opencv2/opencv.hpp"int main()
{//VideoCapture类对象,用于打开视频和摄像头cv::VideoCapture capture; //VideoWriter类对象,用于录像cv::VideoWriter recordVideo; capture.open(0);recordVideo.open("201956.avi", CV_FOURCC('M', 'J', 'P', 'G'), 25.0, cv::Size(640, 480), true);cv::Mat frame;while (capture.isOpened()){capture >> frame;recordVideo << frame;imshow("录制视频", frame);//ESC退出if (cv::waitKey(25) == 27){break;}}capture.release();//需要释放recordVideo.release();return 0;
}
代码解析
00 VideoWriter类(用于录制视频的类和VideoCapture类一样)
class CV_EXPORTS_W VideoWriter
{
public:CV_WRAP VideoWriter();CV_WRAP VideoWriter(const string& filename, int fourcc, double fps,Size frameSize, bool isColor=true);virtual ~VideoWriter();CV_WRAP virtual bool open(const string& filename, int fourcc, double fps,Size frameSize, bool isColor=true);CV_WRAP virtual bool isOpened() const;CV_WRAP virtual void release();virtual VideoWriter& operator << (const Mat& image);CV_WRAP virtual void write(const Mat& image);protected:Ptr<CvVideoWriter> writer;
};
VideoWriter类在OpenCV的highgui.hpp里面,像上面看到的一样包含了:open()函数、isOpened()函数、release()函数、write()函数,还有一个VideoWriter& operator << (const Mat& image);
01 创建VideoWriter类对象
VideoWriter m_SkyWrite; //<VideoWriter类对象,用于录像
02 初始化录像
bool open(const string& filename, int fourcc, double fps,Size frameSize, bool isColor=true);
参数:
filename:保存视频的路径名
fourcc:录制视频的格式
OpenCV提供的格式是未经过压缩的,个人感觉录制的视频是有损失的,没有原视频效果好,目前支持的格式如下:
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
fps:录制视频的帧率(1秒多少帧)
frameSize:录制视频图片的尺寸大小(需要跟原图像保持一致)
isColor:bool类型的,一般默认为true,彩色
03 录制视频(逐帧写入)
m_SkyWrite<<frame;
或者
m_SkyWrite.write(frame);
04 释放对象(最好要释放对象,不然可能录制的视频是没有时间的)
m_SkyWrite.release();
05 操作
用上面这段代码,由于加了个按键控制视频录制,所以需要按下ESC才能完成视频录制
这篇关于OpenCV:VideoWriter视频录制的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!