1)OpenCV与XML数据通信
2)视频的读取与写入
3)如何在没有OpenCV的环境中运行编译好的程序
二、与XML的交互
很多程序都需要有一个配置文件,可以手动的去调整一些运行中的参数,xml文件格式就是我们常用到的一种配置文件格式。opencv中提供了一个处理xml的类用来与xml文件进行简单的数据存储与读取通信。但这个类的功能有限,如果需要更多的功能可以利用第三方的库,比如libxml等。
我们所设计的视频摘要程序,跟常规的视频摘要不同,这里只是通过删除一些无运动目标的帧来达到视频压缩的目的,所以我们的算法可以设计如下:
1,定义一个目标运动的兴趣区域,作为检测区域。 2,遍历指定目录下的所有视频文件,并逐一的进行视频处理。 3,针对视频的每一帧,在检测区域内运用帧差法检测前景移动。 4,如果检测区域内前景的面积超过区域面积的10%,则说明有运动物体,则此帧进行保留,写入压缩视频。否则,该帧直接舍弃。 5,所有视频处理结束,则程序终止。
那么,我们需要一个配置文件,这个文件里需要保存下面几个内容:
1,检测区域的参数
2,视频文件的目录
3,视频文件的后缀格式
4,生存视频的保存目录
1 <?xml version="1.0"?> 2 <opencv_storage> 3 <roi> 3 460 1250 480</roi> 4 <videoReadPath>D:\ExtractKeyImages\video\</videoReadPath> 5 <videoSuffix>*.mp4</videoSuffix> 6 <videoSavePath>../result.avi</videoSavePath> 7 </opencv_storage>
注意所有的节点都保存在opencv_storage节点下。
在OpenCV中定义了一个叫FileStorage的类,提供了一些简单的打开与读取xml文件内容的操作。
我们先来看xml文件数据的读取:
1,用FileStorage的构造函数可以打开一个xml或yml文件,也可以用FileStorage::open()来打开一个数据文件。
FileStorage::FileStorage(); // 默认构造函数 FileStorage::FileStorage(const string& source, int flags, const string& encoding = string());
上面第二个构造函数中有三个参数。
第一个参数source指定读取文件的路径。