尝试使用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,使用C ++编译x64。我尝试在发布模式和调试模式下编译代码,它也会出现同样的错误。 dll是链接器中的附加依赖项,我在其他库目录中有它的库。
那不起作用,环顾四周我看到在Java和Python版本中,将目录添加到路径变量有时会起作用。所以,重新启动,再次尝试,同样的错误。
然后我开始在可能有用的地方添加dll - 全部通过My Documents / Visual 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附加依赖项,现在发布和调试编译都正常工作那个视频文件。
答案 0 :(得分:0)
(如果我解决了自己的问题,没有意识到ettiquite会回答一个问题,哎呀)
通过将发布运行时库更改为/ MT而不是/ MD来管理修复它,删除了调试版和发布版本的链接器上的opencv_ffmpeg300_64.dll附加依赖项,现在发布和调试编译和工作该视频文件很好。