一、无法读取文件
报错:
公司主营业务:成都网站建设、网站建设、移动网站开发等业务。帮助企业客户真正实现互联网宣传,提高企业的竞争能力。创新互联是一支青春激扬、勤奋敬业、活力青春激扬、勤奋敬业、活力澎湃、和谐高效的团队。公司秉承以“开放、自由、严谨、自律”为核心的企业文化,感谢他们对我们的高要求,感谢他们从不同领域给我们带来的挑战,让我们激情的团队有机会用头脑与智慧不断的给客户带来惊喜。创新互联推出深州免费做网站回馈大家。
OpenCV报错:
warning: Error opening file (../../modules/highgui/src/cap_ffmpeg_impl.hpp:529)
capture device failed to open!
(1)可以是读取的文件目录存在问题,找不到相应的视频文件,导致返回NULL;
(2)读取的视频文件存在问题,不是真正的视频文件;
(3)缺失解码
由于我是从台式机上copy过来的项目,前两总情况基本不成立;由于系统的差异,我还是测试了路径中使用‘/’ 或者'\\'、间接路径改为直接路径等,但是任然没有解决。
2、解决方法
通过一系列的测试,我最终锁定问题3,于是检索相关问题解决方案。
(1)部分解决方法 下载xvid并安装,https://www.xvid.com/download/ 。
(2)另一种说法是下载K-Lite_Codec_Pack 软件安装,里面包含了需要的解码接口。
然而,这两种方法都没有解决我存在的问题,最初我还以为是设置除了问题,是不是环境变量设置不对,安装以上的软件是不需要配置,但总觉得挺麻烦,于是冷静下来,从头在思考。总觉得opencv设计不应该存在这么强依赖性的缺陷,于是我想到是不是缺少组件。因为编译通过,程序可以运行,我就认为配置上不会存在问题,但还是看了看相关dll。
(3)缺少opencv_ffmpeg2410.dll,将opencv_ffmpeg2410.dll加入到项目根文件夹下或者debug中。
三、dll文件配置
我们在使用vs进行开发调试的时候经常会遇到一个问题,就是当我们的主工程引用到其他工程更新的dll(我们经常采用copy到工程目录的方法)、亦或者当我们的多个工程引用到同一个dll文件的时候,我们怎么来配置:
1、将dll配置到环境变量:
这种方法当然是可行的,只不过当我们的工程位置发生变化,环境变量就需要重新配置,而且为了单个小工程就去改变环境变量显得小题大做,不过也是一种方法;
2、工程的本地化配置:
通过设置vs工程的环境变量,实现对单个工程本地化配置的目标,环境变量可随整个工程迁移,设置方法:vs工程属性-->配置属性-->调试-->环境,例如,我们要引用../../bin/目录里面的dll,那么我们可以设置为:path=%path%;..\..\bin,如图:
“Win32Project3.exe”(Win32): 已加载“D:\software\VS2013\VS2013 文档\Win32Project3\Debug\Win32Project3.exe”。已加载符号。 “Win32Project3.exe”(Win32): 已加载“C:\Windows\SysWOW64\ntdll.dll”。无法查找或打开 PDB 文件。 “Win32Project3.exe”(Win32): 已加载“C:\Windows\SysWOW64\kernel32.dll”。已加载符号。 “Win32Project3.exe”(Win32): 已加载“C:\Windows\SysWOW64\KernelBase.dll”。无法查找或打开 PDB 文件。 “Win32Project3.exe”(Win32): 已加载“C:\Windows\SysWOW64\msvcr120d.dll”。已加载符号。 程序“[4308] Win32Project3.exe”已退出,返回值为 0 (0x0)。
1、点 调试,然后 选项和设置
2、右边勾上 启用源服务器支持
3、左边点 符号,把 微软符号服务器 勾选上
4、运行的时候等一下,加载完成后就好了。
5、只是第一次加载,不用担心。或者,你也可以等加载完了之后,再把之前勾选的取消掉,也没有问题。