【发布时间】:2015-06-01 15:07:02
【问题描述】:
我正在使用 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 个小时却不明白为什么。
【问题讨论】:
-
您是否在发布模式下编译并链接调试库,反之亦然?您能否创建一个仍然给您带来问题的最小可编译示例(例如 main 函数)?
-
@Micka 感谢您的回复。我发现这是由于缺少 opencv_ffmpeg dll,但奇怪的是它只能在没有所需 dll 的情况下工作一次,我不知道如何。
-
@Horizon1710 你是怎么解决这个问题的?你能帮我stackoverflow.com/questions/70130274/…