2

我想为我正在制作的程序读取 .avi 视频文件。我将文件位置保存为string. 有没有关于在 c++ 中使用 .avi 文件的好教程,或者有谁知道该读谁?和普通文件一样吗?

以前问过一个更详细的问题,但这是我想做的:

我正在制作一个检测人脸的程序(通过 OpenCV) 到目前为止,我已经获得了一个视频处理器程序,它将检测帧上的每个人脸,并将帧作为图像和CvRec人脸返回。我想对这些面孔进行测试,以验证它们实际上都是面孔。

在我完成所有面孔(测试)之后,我想拍摄图像并一起测试它们。我测试每一帧上的人脸的大小和距离变化。如果面孔在两秒钟的帧长度内通过,那么我想裁剪面孔并使其成为每一帧的主题。

裁剪每一帧后,我想为用户保存新的视频文件。

希望这会有所帮助。如果有人需要更好的解释,请告诉我。

4

2 回答 2

5

首先,有一点背景。

什么是AVI?
AVI代表音频视频交错它是RIFF(资源交换文件格式)的一个特例。AVI 由 Microsoft 定义,它是最常见的音频/视频数据格式。

我假设您想要读取 avi 文件并解码压缩的视频帧。AVI 文件就像任何其他普通文件一样,您可以使用fread()在 C 中)或iostream在 C++ 中)打开一个 avi 文件并读取它的内容。但是 avi 文件的内容是压缩格式的视频帧。压缩允许更大尺寸的视频内容有效地打包在更少的内存空间中。要理解这些压缩数据,您必须对编码的数据格式进行解码。您必须研究描述如何完成AVI编码的标准和然后提取和解码帧。现在,当馈送到视频设备时,此原始视频数据将以视频格式显示。

于 2011-05-05T15:08:22.060 回答
4

看来您留在 OpenCV 中,所以事情很简单。如果 OpenCV 编译正确,它可以将 io/coding/decoding 委托给其他库。例如 Quicktime 和其他人,但最好是使用 ffmpeg。您可以使用 OpenCV API 打开、读取和解码所有内容,该 API 为您提供逐帧的视频。

确保您的 OpenCV 是使用 ffmpeg 支持编译的,然后阅读有关如何读取/写入 AVI 文件的 OpenCV 教程。这真的很容易。

不过,让 OpenCV 使用 ffmpeg 支持构建可能很困难。如果您无法让 ffmpeg 与当前版本一起运行,您可能需要切换到旧版本的 OpenCV。

就我个人而言,我不会花时间尝试自己阅读视频并将任务委托给 OpenCV。这就是它应该如何使用的方式。

于 2011-05-05T15:16:03.977 回答