无法读取 opencv 3 中的 mp4 文件
Can't read mp4 files in opencv 3
在尝试使用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附加依赖项,现在发布和调试都可以编译该视频文件并正常工作。
- 将成员变量添加到共享库中的类中,不会破坏二进制兼容性吗
- .cpp和.h文件中的模板专用化声明
- 反向给定链表中的K节点
- 正在查找文档以获得PS4平台的C++中的设备信息
- enum是C++中的宏变量还是整数变量
- 使用C++库在Android项目中修改gradle中的cmake参数,用于插入指令的测试
- 将字符串存储在c++中的稳定内存中
- 文本文件中的单词链表
- 递归函数计算序列中的平方和(并输出过程)
- 如何从C++中的依赖类型中获得它所依赖的类型
- C++中的"inline"关键字
- 如何运行位于boost/libs/python/example/tutorial目录中的hello.cpp和Jamfil
- 如何使用 < 和 > 命令获取 c++ 中的输入和输出?
- 用C++中的一个变量定义一个常量
- vector.resize()中的分配错误
- 使用指针从C++中的数组中获取最大值
- arr[-1]在c++中的奇怪行为
- 将网络摄像机(RTSP)中的帧保存到mp4文件中
- 无法读取 opencv 3 中的 mp4 文件
- 在C++中使用 DirectShow 解码带有 H.264 流的 MP4 视频