我使用的是Visual Studio 2008和OpenCV 2.4.5。
我有一个包含已处理视频帧的类,我想将它们保存为视频文件。我在构造函数中创建了一个cv :: VideoWriter对象,并通过循环将帧写入cv :: VideoWriter对象并成功获取所需视频。获取第一个视频后问题就开始了。
我有时也希望通过cv :: VideoWriter :: release()来结束这个视频文件,并通过使用不同的名称重新打开它来重用此对象,如下所示:
outputVideo.release();
outputVideo.open("D:\\example2.avi", CV_FOURCC('D','I','V','X'), 15, videoSize, true);
但我意识到,第二次,即使cv :: VideoWriter :: isOpened()函数有趣地返回true,VideoWriter也不会在相关路径上创建任何文件。
但更有趣的是,我也无法在我班级的任何其他地方创建和使用cv :: VideoWriter对象的任何其他实例。越来越有趣的是,我只能在Constructor中创建和使用多个实例。
尝试过很多事情;指针,不同的编解码器,在构造函数中创建对象以及在其他方法中使用它们,没有任何帮助。
我唯一看到的是我只能创建一个实例并且只使用它一次,我在发布后不能再使用它或者我不能创建一个新实例并且如果我出来就打开它我的类的构造函数,甚至isOpened()方法总是返回true(除了第一次在相关路径上没有创建文件)。没有找到任何可以帮助我解决这个奇怪的问题在互联网上。
任何帮助都非常感激,花了我3个小时而且无法理解为什么。
答案 0 :(得分:0)
我发现这个问题是由于缺少 opencv_ffmpeg.dll 文件引起的。但对我来说仍然很奇怪,它只有一次没有所需的dll。我不明白没有这个dll文件它是如何工作的。