无法读取 opencv 3 中的 mp4 文件

Can't read mp4 files in opencv 3

本文关键字:中的 mp4 文件 opencv 读取      更新时间:2023-10-16

在尝试使用VideoCapture打开文件时,我甚至无法获得opencv 3.0.0(来自opencv网站的预编译版本)进行编译。

我把我的代码缩减为:

#include "stdafx.h"
#include <opencv/cxcore.h>
#include <opencv2/core/mat.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <iostream>
#include <opencv/cxcore.h>
#include <opencv/highgui.h>
#include <opencv/cv.h>
#include <opencv2/opencv.hpp>
#include <opencv2/core/core.hpp>
#include <string>
#include <cmath>
#include <time.h>
using namespace cv;
using namespace std;
int main() {
   VideoCapture inputCap("C:/Users/user.name/Desktop/Video0022.mp4");
}

编译它会产生:opencv_ffmpeg300_64.dll : fata error LNK1107: invalid or corrupt file: cannot read at 0x408,在文件opencv_ffmpeg300_64.dll中,第1行,第1列。

这是在Win 7计算机上使用Visual Studio Express 2012,在x64和C++中进行编译。我尝试过在发布模式和调试模式下编译代码,但它给出了相同的错误。dll在链接器的附加依赖项中,我在附加库目录中有它所在的库。

这不起作用,环顾四周,我发现在Java和Python版本中,将目录添加到路径变量有时会起作用。这样做,重新启动,再试一次,同样的错误。

然后,我开始在任何可能有用的地方添加dll——所有这些都通过My Documents/View Studio 12/Projects/ProjectName文件夹,在opencv文件夹的多个位置,但仍然存在相同的错误。

我还尝试关闭启用增量链接,但也没有成功。

我很确定这不是编解码器问题,因为这是在opencv 2.4.7/visual studio 10中工作的(我将文件夹重命名为opencv 2文件夹,以免干扰opencv 3.0.0的安装)。

视频本身很好,我可以在VLC和windows媒体播放器中打开它,没有问题,而且使用旧的opencv东西。

如果我从链接器的附加依赖项中删除dll,我实际上可以编译.cpp,但它永远不会真正打开文件(inputCap.isOpened()总是返回false)。然而,我可以毫无问题地打开网络摄像头。

--

编辑:我将发布运行库更改为/MT而不是/MD,删除了链接器的调试和发布版本上的opencv_ffmpeg300_64.dll附加依赖项,现在发布和调试都可以编译该视频文件并正常工作。

(没有意识到如果我解决了自己的问题,ettiquite会回答一个问题,哇)

通过将发布运行库更改为/MT而不是/MD来修复它,删除了链接器的调试和发布版本上的opencv_ffmpeg300_64.dll附加依赖项,现在发布和调试都可以编译该视频文件并正常工作。