一、简介
在试验中需要常常将实验结果进行保存,在opencv中提供很好用的录制视频的句柄,也可称之为类videowriter。
videowriter应用那是相当的筒单,总之分为三步:
VideoWriter writer; writer.open("C:\Users\lenovo\Documents\04.avi",CV_FOURCC('M', 'J', 'P', 'G'), rate, //不进行跟踪,定位,只显示、录制时的帧率 Size(inFrame.cols,inFrame.rows), true); if (!writer.isOpened()) { return; } writer<<inFrame; writer.release();
open函数:
open(const string& filename, int fourcc, double fps, Size frameSize, bool isColor=true);
open函数目的是实现视频的存储
- 第一个参数表示读取的视频帧所存放的新的文件
- 第二个参数指的是视频存放的编码格式
- fps表示每秒的帧数
- size表示图像的长宽大小
二、应用难点
应用中出现的问题归结为:打不开、保存文件为空、保存的文件打不开
1.打不开
a、输入路径名称不对
在程序中经常遇到打不开的问题,最常见的问题是路径输入不对,比如:
strvideoFile = "C:UserslenovoDocumentsvisual studio 2010TestMyClassTestopencv3.avi
上述代码中赋值操作,因为转义符的原因读入内存中,路径就会出现问题,结果为:
C:UserslenovoDocumentsisual studio 2010TestMyClassTestopencv.avi
当然打不开了,所以在程序中一定注意转义符的问题。
正确的路径命名方式为:
strvideoFile = "C:/Users/lenovo/Documents/visual studio 2010/TestMyClass/Testopencv/3.avi"; strvideoFile = "C:\Users\lenovo\Documents\visual studio 2010\TestMyClass\Testopencv\3.avi";
b、编码格式不对
在open函数中第二个参数是编码格式,一定按照提供的编码格式进行填写,在应用中最好的解决方法是为-1。当为-1时,程序对弹出如下对话框供你选择
这样就没有问题啦,很容易解决编码问题。
2.保存文件为空
这种问题往往是后缀名不对,自己试过.Mp4没有成功,后来改为.avi就成功了
3.保存文件打不开
其实注意上面两个问题,就可以进行录制视频了,在录制视频无法打开打开问题,这个就不好排查了。
但可以讲一下自己遇到的问题:
最常见的问题是帧率设置不对,帧大小不对。
三、实例代码
string strimgfile,strvideoFile ; /*strimgfile = "C:UserslenovoDocumentsvisual studio 2010TestMyClassTestopencv12.png"; strvideoFile = "C:UserslenovoDocumentsvisual studio 2010TestMyClassTestopencv3.avi";*/ strimgfile = "C:/Users/lenovo/Documents/visual studio 2010/TestMyClass/Testopencv/12.png"; strvideoFile = "C:/Users/lenovo/Documents/visual studio 2010/TestMyClass/Testopencv/3.avi"; //strvideoFile = "C:\Users\lenovo\Documents\visual studio 2010\TestMyClass\Testopencv\3.avi"; Mat frame = imread(strimgfile); namedWindow("图像"); imshow("图像",frame); namedWindow("视频"); VideoCapture capture; VideoWriter writer; capture.open(strvideoFile); Mat inFrame; if (!capture.isOpened()) { return; } int rate = capture.get(CV_CAP_PROP_FPS); int delay = 1000/rate; capture>>inFrame; writer.open("C:\Users\lenovo\Documents\04.avi",CV_FOURCC('M', 'J', 'P', 'G'), rate, //不进行跟踪,定位,只显示、录制时的帧率 Size(inFrame.cols,inFrame.rows), true); if (!writer.isOpened()) { return; } while(true) { capture>>inFrame; writer<<inFrame; imshow("视频",inFrame); waitKey(delay); if (!capture.grab()) { break; } } writer.release(); system("pause");
https://blog.csdn.net/qq_30011277/article/details/109219684