Windows7+VS2010下OpenCV环境配置

        OpenCV(Open Source Computer Vision Library)是BSD协议下的开源代码库。OpenCV提供了一系列高性能的图像处理函数。目前(2015.01.27)最新版本是2.4.10。1.x版本使用C的API,2.x版本同时提供C++的API。全新的3.0.0版本已经到了Beta阶段,相对2.x会有很大变化。C++版本的数据结构和函数的性能比C版本的要好很多,如果是在嵌入式平台使用OpenCV,只能用C版本;否则,最好使用C++来写。

        我的配置情况:

                Windows 7 旗舰版 x64

                Visual Studio 2010 旗舰版

                .NET Framework 4.5

                OpenCV 2.4.7


1.下载并解压OpenCV

        从官网可以下载最新版,或者在这里直接下载2.4.10版本。下载到的文件名为“opencv-2.4.10.exe”,是个自解压文件,大小350MB左右。

        下载好之后,解压到任意一个文件夹,比如“E:\softwares”。没有必要手动创建一个专门的文件夹,因为文件在解压时会自动创建一个叫opencv的文件夹,并把所有文件都解压到这个文件夹内。

extract

2.设置环境变量

        OpenCV库函数需要通过用户环境变量调用所需要的库文件。点击:开始->计算机(右击)->属性->高级系统设置->高级->环境变量,在用户变量里增加一项:

                变量名:path

                变量值:E:\softwares\opencv\build\x86\vc10\bin

        如果已经有path项,在其变量值结尾添加英文分号“;”,再加上上面那个值。

        这里的“x86”代表目标程序是32位的,如果要写64位的程序则选择“x64”文件夹。并不是根据开发环境(你的机器)选择的。

        后面的“vc10”代表使用Visual C++ 2010开发。如果使用Visual Studio 2012,则填写“E:\softwares\opencv\build\x86\vc11\bin”。

path

        注销用户,重新登录Windows,保证环境变量更新并起作用。

3.创建并配置工程

        打开Visual Studio 2010,新建一个工程,选择Visual C++ ->Win32->Win32 Console Application,命名例如“OpencvTest”,

new-proj-1

        点击“Next”,

new-proj-2

        选择Console application和Empty project。如果不勾选“Empty project”并勾选“Precompiled header”,在代码第一行前面还要加上一行:

避免出现fatal error C1010错误。然后点击“Finish”。

new-proj-3

        在Solution Explorer中右击工程名,选择Properties。

new-proj-4

        在弹出的窗口“OpencvTest Property Pages中,Configuration选择“Debug”(或者默认的“Active(Debug)”),Platform选择“Win32”。在左边选择Configuration Properties->VC++ Directories,在右边的General中编辑Include Directories,增加以下三项:

                E:\softwares\opencv\build\include

                E:\softwares\opencv\build\include\opencv

                E:\softwares\opencv\build\include\opencv2

new-proj-5

        其实只需要填入第一行即可。由于“include\opencv”包含C版本的头文件,“include\opencv2”包含C++版本的头文件。所以编写代码时,在头文件名称前加上“opencv/”或“opencv2/”来区分两种版本。

Library Directories中增加以下一项:

                E:\softwares\opencv\build\x86\vc10\lib

new-proj-6

        把Configuration改为“Release”,然后对Include DirectoriesLibrary Directories做同样的修改。如果只写练习程序,只用debug功能,那么“Release”可以不用修改。如果使用Visual Studio 2012,则填写“E:\softwares\opencv\build\x86\vc11\lib”。

        仍然在“OpencvTest Property Pages”窗口下,Configuration选择“Debug”。在左边选择Configuration Properites->Linker->Input,在右面编辑Additional Dependencies,增加以下若干项(可以根据自己的需要适当删减,关于各个模块的功能,请参考这里):

                 opencv_calib3d2410d.lib
                opencv_contrib24
10d.lib
                opencv_core24
10d.lib
                opencv_features2d24
10d.lib
                opencv_flann24
10d.lib
                opencv_gpu24
10d.lib
                opencv_highgui24
10d.lib
                opencv_imgproc24
10d.lib
                opencv_legacy24
10d.lib
                opencv_ml24
10d.lib
                opencv_objdetect24
10d.lib
                opencv_ts24
10d.lib
                opencv_video24
10d.lib

new-proj-7

        (同样,如果仅使用debug模式,这一步可以跳过)把Configuration改为“Release”,在Additional Dependencies增加以下若干项(在文件名上的区别仅在于在末尾少了一个“d”):

                opencv_calib3d2410.lib
                opencv_contrib24
10.lib
                opencv_core24
10.lib
                opencv_features2d24
10.lib
                opencv_flann24
10.lib
                opencv_gpu24
10.lib
                opencv_highgui24
10.lib
                opencv_imgproc24
10.lib
                opencv_legacy24
10.lib
                opencv_ml24
10.lib
                opencv_objdetect24
10.lib
                opencv_ts24
10.lib
                opencv_video24
10.lib

new-proj-8

        虽然OpenCV版本众多,但文件结构都很类似。如果想使用其他版本,如2.4.7而不是2.4.10,只需要修改上面一系列*.lib文件名中的版本号即可,比如把“opencv_calib3d2410.lib”改为“opencv_calib3d247.lib”。在Notepadd++等文本编辑器中,有一个快速修改的方法,就是使用Notepadd++等文本编辑器的替换功能,以“247”替换“2410”。


4.例程测试

        假设在“H:\”盘有个名为“bee.jpg”的图片,下面用一段程序实现把这个图片逐渐变成灰度图像的过程。

        删掉OpencvTest.cpp内的内容,把下面的代码复制进去:

        这段程序先读入bee.jpg图片,再创建一个同样大小的灰度版本的图片,然后在一个循环中把两张图片按逐渐变化的比例融合,产生从彩色到灰度变化的动态效果。

        点击按钮“Start Debugging”或按F5键,程序就会运行了。运行效果如下:

result

        然后按键盘上任意一键,程序就会结束。


5.常见错误处理

        1.如果提示缺少tbb_debug.dll,需要下载一个tbb41_20130314oss_win.rar文件。将其解压后的bin文件夹里的所有文件复制到:

                E:\softwares\opencv\build\common\tbb

        然后在用户环境变量path里添加:

                E:\softwares\opencv\build\common\tbb\ia32\vc10

        2.如果提示“LINK : fatal error LNK1123: failure during conversion to COFF: file invalid or corrupt”,在Project Properity中找到Configuration Properties->Linker->General,把右面Enable Incremental Linking改为“No(/INCREMENTAL:NO)”。这一项在Debug模式下默认为Yes,在Release模式下默认为True。

new-proj-9


2015.01.27更新:

        更新到OpenCV 2.4.10版本。#opencv2410

        并加入Visual Studio 2012配置方法。#vc11_bin #vc11_lib

2015.05.15更新:

        加入新建项目勾选“Empty project”的说明。#stdafx.h

共有160条评论

  1. 博主,你好!我按照你的方法配置opencv2.4.7   vs2010时出现:

    1>—— 已启动生成: 项目: OpencvTest, 配置: Debug Win32 ——
    1>生成启动时间为 2016/11/8 13:29:25。
    1>InitializeBuildStatus:
    1>  正在对“Debug\OpencvTest.unsuccessfulbuild”执行 Touch 任务。
    1>ClCompile:
    1>  所有输出均为最新。
    1>  OpencvTest.cpp
    1>c:\users\administrator\documents\visual studio 2010\projects\opencvtest\opencvtest\opencvtest.cpp(1): error C2001: 常量中有换行符
    1>
    1>生成失败。
    1>
    1>已用时间 00:00:00.96
    ========== 生成: 成功 0 个,失败 1 个,最新 0 个,跳过 0 个 ==========

    还有执行时出现这个问题:无法启动程序"visual studio 2010\projects\Opentest\Debug\OpencvTest.exe"  系统找不到指定的文件。

    求博主解答!谢谢

      1. 你的文件路径filename中文件夹之间是单斜线还是双斜线?如果字符串里面含有\n,\t之类的会被编译器理解为换行,制表符等转义字符,都要改成双斜线

  2. 1>—— 已启动生成: 项目: OpencvTest, 配置: Debug Win32 ——
    1>生成启动时间为 2016/11/5 14:06:51。
    1>InitializeBuildStatus:
    1>  正在对“Debug\OpencvTest.unsuccessfulbuild”执行 Touch 任务。
    1>ClCompile:
    1>  所有输出均为最新。
    1>  所有输出均为最新。
    1>ManifestResourceCompile:
    1>  所有输出均为最新。
    1>LINK : fatal error LNK1104: 无法打开文件“opencv_calib3d248d.lib”
    1>
    1>生成失败。
    1>
    1>已用时间 00:00:00.37
    ========== 生成: 成功 0 个,失败 1 个,最新 0 个,跳过 0 个 ==========
     

     

    请问这个怎么弄?

    1. 博主,我知道哪里错了,但是出现了新的问题,运行没有错误,但是结果出不来,说应用程序无法正常启动,

      “OpencvTest.exe”: 已加载“D:\vs2010\OpencvTest\Debug\OpencvTest.exe”,已加载符号。
      “OpencvTest.exe”: 已加载“C:\Windows\SysWOW64\ntdll.dll”,Cannot find or open the PDB file
      “OpencvTest.exe”: 已加载“C:\Windows\SysWOW64\kernel32.dll”,Cannot find or open the PDB file
      “OpencvTest.exe”: 已加载“C:\Windows\SysWOW64\KernelBase.dll”,Cannot find or open the PDB file
      “OpencvTest.exe”: 已加载“C:\Windows\SysWOW64\msvcp100d.dll”,已加载符号。
      线程 'Win32 线程' (0x12c4) 已退出,返回值为 -1073741701 (0xc000007b)。
      线程 'Win32 线程' (0x2de4) 已退出,返回值为 -1073741701 (0xc000007b)。
      线程 'Win32 线程' (0x2f70) 已退出,返回值为 -1073741701 (0xc000007b)。
      程序“[3716] OpencvTest.exe: 本机”已退出,返回值为 -1073741701 (0xc000007b)。
       

      1. 我遇到的这个情况是格式化输入错误,scanf读取数据类型与定义类型不一致,不知道你的是不是。

  3. 楼主:E:\softwares\opencv\build\x86\vc10\lib

    我没有找到啊,我的那里面就这两个:

    1、D:\Program Files\opencv\build\x86\vc11\lib

    2、D:\Program Files\opencv\build\x86\vc12\lib

    这是为什么?

    我用这个D:\Program Files\opencv\build\x86\vc11\lib配置。

    运行测试程序,最后程序运行显示的是:系统找不到指定文件

    请问楼主这是那么问题?

    怎么解决?

    谢谢!

     

    1. 这是因为你下载的OpenCV预编译库不支持vs2010,可以参考我的另一篇文章http://johnhany.net/2015/10/windows7-compile-opencv3-with-cuda/试着自己编译一下需要的版本。

  4. 你好,我想请问一下,这是什么原因呢,该如何解决??谢谢

    1>d:\program files (x86)\opencv\build\include\opencv2\core\mat.hpp(1965): warning C4819: 该文件包含不能在当前代码页(936)中表示的字符。请将该文件保存为 Unicode 格式以防止数据丢失
    1>d:\program files (x86)\opencv\build\include\opencv2\core\persistence.hpp : warning C4819: 该文件包含不能在当前代码页(936)中表示的字符。请将该文件保存为 Unicode 格式以防止数据丢失
    1>d:\program files (x86)\opencv\build\include\opencv2\core\mat.hpp(1965): warning C4819: 该文件包含不能在当前代码页(936)中表示的字符。请将该文件保存为 Unicode 格式以防止数据丢失
    1>d:\program files (x86)\opencv\build\include\opencv2\core\utility.hpp : warning C4819: 该文件包含不能在当前代码页(936)中表示的字符。请将该文件保存为 Unicode 格式以防止数据丢失
    1>d:\program files (x86)\opencv\build\include\opencv2\core\utility.hpp : warning C4819: 该文件包含不能在当前代码页(936)中表示的字符。请将该文件保存为 Unicode 格式以防止数据丢失
    1>LINK : fatal error LNK1104: 无法打开文件“opencv_calib3d310d.lib”

  5. 1>test5.obj : error LNK2019: 无法解析的外部符号 "class cv::Mat __cdecl cv::imread(class cv::String const &,int)" (?imread@cv@@YA?AVMat@1@ABVString@1@H@Z),该符号在函数 _main 中被引用
    1>test5.obj : error LNK2019: 无法解析的外部符号 "private: char * __thiscall cv::String::allocate(unsigned int)" (?allocate@String@cv@@AAEPADI@Z),该符号在函数 "public: __thiscall cv::String::String(char const *)" (??0String@cv@@QAE@PBD@Z) 中被引用
    1>test5.obj : error LNK2019: 无法解析的外部符号 "private: void __thiscall cv::String::deallocate(void)" (?deallocate@String@cv@@AAEXXZ),该符号在函数 "public: __thiscall cv::String::~String(void)" (??1String@cv@@QAE@XZ) 中被引用
    1>test5.obj : error LNK2019: 无法解析的外部符号 "void __cdecl cv::error(int,class cv::String const &,char const *,char const *,int)" (?error@cv@@YAXHABVString@1@PBD1H@Z),该符号在函数 "public: class cv::Size_<int> __thiscall cv::MatSize::operator()(void)const " (??RMatSize@cv@@QBE?AV?$Size_@H@1@XZ) 中被引用
    1>E:\TEST\test5\Debug\test5.exe : fatal error LNK1120: 5 个无法解析的外部命令
    ========== 生成: 成功 0 个,失败 1 个,最新 0 个,跳过 0 个 ==========

  6. 按照楼主的方法配置,然后运行那个程序,为什么会出现(无法启动程序。。。exe,系统找不到指定的文件)的提示,希望楼主帮帮我

    1. 如果新建项目时选择的是Empty project,就不需要包含stdafx.h。

      highgui.h是属于opencv的include\opencv下的一个头文件,如果在项目属性的Include Directories中添加了\build\include\opencv,那么#include 与#include 的作用是相同的。另外要注意opencv\highgui.h是针对C接口的,而opencv2\highgui.hpp是针对C++接口的。

  7. “opencvtest.exe”: 已加载“C:\Users\lenovo\Documents\Visual Studio 2010\Projects\opencvtest\Debug\opencvtest.exe”,已加载符号。
    “opencvtest.exe”: 已加载“C:\Windows\SysWOW64\ntdll.dll”,Cannot find or open the PDB file
    “opencvtest.exe”: 已加载“C:\Windows\SysWOW64\kernel32.dll”,Cannot find or open the PDB file
    “opencvtest.exe”: 已加载“C:\Windows\SysWOW64\KernelBase.dll”,Cannot find or open the PDB file
    调试器:: 在进程加载过程中引发了未处理的无法继续的异常
    程序“[6780] opencvtest.exe: 本机”已退出,返回值为 -1073741701 (0xc000007b)。
     

  8. 请教一下大神,这是为什么呢?应该如何解决?谢谢啦

    1>—— Rebuild All started: Project: OpencvTest, Configuration: Debug Win32 ——
    1>Build started 2016/6/29 12:30:02.
    1>_PrepareForClean:
    1>  Deleting file "Debug\OpencvTest.lastbuildstate".
    1>InitializeBuildStatus:
    1>  Touching "Debug\OpencvTest.unsuccessfulbuild".
    1>ClCompile:
    1>  OpencvTest.cpp
    1>e:\softwares\opencv\build\include\opencv2\core\mat.hpp(1965): warning C4819: The file contains a character that cannot be represented in the current code page (936). Save the file in Unicode format to prevent data loss
    1>e:\softwares\opencv\build\include\opencv2\core\persistence.hpp : warning C4819: The file contains a character that cannot be represented in the current code page (936). Save the file in Unicode format to prevent data loss
    1>e:\softwares\opencv\build\include\opencv2\core\mat.hpp(1965): warning C4819: The file contains a character that cannot be represented in the current code page (936). Save the file in Unicode format to prevent data loss
    1>e:\softwares\opencv\build\include\opencv2\core\utility.hpp : warning C4819: The file contains a character that cannot be represented in the current code page (936). Save the file in Unicode format to prevent data loss
    1>e:\softwares\opencv\build\include\opencv2\core\utility.hpp : warning C4819: The file contains a character that cannot be represented in the current code page (936). Save the file in Unicode format to prevent data loss
    1>LINK : fatal error LNK1181: cannot open input file 'opencv_calib3d310d.lib'
    1>
    1>Build FAILED.
    1>
    1>Time Elapsed 00:00:02.06
    ========== Rebuild All: 0 succeeded, 1 failed, 0 skipped ==========
     

  9. 为什么创建完工程就有那些cpp文件了,按照那个步骤源文件,头文件,资源文件会自己加进去吗

    我的错误是fatal error C1083: 无法打开包括文件:“opencv2/core/core.hpp”: No such file or directory

    1. 如果是侧重2.4版本的,推荐阅读布拉德斯基的《学习OpenCV》;如果想尝试3.0以上版本,可以读一下毛星云的《OpenCV3编程入门》,我们团队的新同学都在看这本。

  10. 1>—— 已启动生成: 项目: OpencvTest, 配置: Debug Win32 ——
    1>生成启动时间为 2016/6/12 星期日 11:56:26。
    1>ClCompile:
    1>  OpencvTest.cpp
    1>c:\users\administrator\desktop\vs\opencvtest\opencvtest\opencvtest.cpp(11): warning C4129: “A”: 不可识别的字符转义序列
    1>c:\users\administrator\desktop\vs\opencvtest\opencvtest\opencvtest.cpp(11): warning C4129: “D”: 不可识别的字符转义序列
    1>c:\users\administrator\desktop\vs\opencvtest\opencvtest\opencvtest.cpp(11): warning C4129: “O”: 不可识别的字符转义序列
    1>c:\users\administrator\desktop\vs\opencvtest\opencvtest\opencvtest.cpp(11): warning C4129: “O”: 不可识别的字符转义序列
    1>
    1>生成成功。
    1>
    1>已用时间 00:00:01.86
    ========== 生成: 成功 1 个,失败 0 个,最新 0 个,跳过 0 个 ==========

     

    求大神解决啊,没有上面结果 是什么原因呢?

  11. 1>c:\users\administrator\desktop\vs\opencvtest\opencvtest\opencvtest.cpp(8): warning C4129: “A”: 不可识别的字符转义序列
    1>c:\users\administrator\desktop\vs\opencvtest\opencvtest\opencvtest.cpp(8): warning C4129: “D”: 不可识别的字符转义序列
    1>c:\users\administrator\desktop\vs\opencvtest\opencvtest\opencvtest.cpp(8): warning C4129: “O”: 不可识别的字符转义序列
    1>c:\users\administrator\desktop\vs\opencvtest\opencvtest\opencvtest.cpp(8): warning C4129: “O”: 不可识别的字符转义序列

     

     

    编译出现这个 是什么意思???

  12. 按照楼主的方案配置了,把案例代码复制进去编译,结果:

    fatal error C1083: 无法打开包括文件:“opencv2/core/core.hpp”: No such file or directory
    1>

     

  13. 你好 我运行别人的程序exe时出现了缺少opencv_244d.dll 无法运行的问题 按照你说的方法配置了opencv 可还是不行 求解 谢谢

     

    1. 2.4.4版本比较老,我没用过,在官网也没找到相应的下载地址,所以不能确定opencv_244d.dll是来自opencv库的,还是需要自己编译产生的。如果你有2.4.4版本的库,请看一下在build\bin目录里有没有这样一个文件。

  14. 你好,我照你的配置了一下再vs1020下的opencv2.4.10,然后运行的时候出了这个错误,怎么解决啊?

    错误    4    error C1083: 无法打开包括文件:“cv.h”: No such file or directory    c:\users\administrator\desktop\mygraphcuts0.1\mygraphcuts0.1\grabcutmodel.h    3    1    MyGraphCuts0.1

    错误    1    error C1083: 无法打开包括文件:“opencv2/highgui/highgui.hpp”: No such file or directory    c:\users\administrator\desktop\mygraphcuts0.1\mygraphcuts0.1\CvvImage.h    9    1    MyGraphCuts0.1

     

    1. 检查一下包含目录是否正确。比如如果包含目录只填写了opencv\build\include,在代码中包含头文件时应该指明“#include “opencv/cv.h””

  15. 执行时出现如下错误:d:\program files\opencv\build\include\opencv2\core\types_ch(55):fatal error C1083:无法打开包括文件“assert”:No such file or directory          请问是怎么回事?包含目录我添加了opencv\build\include;opencv\build\include\opencv;opencv\build\include\opencv2

    1. assert.h是VC自身提供的头文件。看一下在你的vs安装目录下的VC\include是否存在assert.h文件,没有的话就是vs的安装过程有问题,需要修复一下;有的话,检查一下项目的include目录里面是否有一项“$(VCInstallDir)include”,或者把types_c.h第55行的#include 改成#include

      1. 1>LINK : fatal error LNK1104: 无法打开文件“opencv_oc12410d.lib”
        又出现了这个问题,楼主怎么解决?是opencv_ocl2410d.lib还是opencv_oc12410.lib

        1. 预编译库并没有opencv_ocl,看来你需要的是自己编译的库(首先要确定在CMAKE中配置了OPENCL的路径)。名称中的“ocl”是字母“l”而不是数字“1”,代表OpenCL。为Release选择不带d的,为Debug选择带d的。

          1. 楼主,能具体点么?CMAKE在哪里找到?新手刚开始学,万分感谢!!

          2. 我试过了,附加依赖项里我用了文中提到的那几个,但编译时还会出现上面那个问题。我也试过重启,都是同样的问题打不开文件opencv_oc12410d.lib

          3. 代码中是不是用#pragma comment(lib, …)链接了这个库?还是之前配置环境的时候偶然修改了VC的配置文件?

          4. 我一切都是按配置步骤进行的,找不出问题出在哪?我把原先的vs卸载掉,想重新安装再配置,但发现重新安装的vs里面都是配置好的,

          5. 在安装VS的时候,也同时安装了许多其他软件包,所以要完整的卸载也要把那些其他软件包卸载掉。具体是哪些软件包可以在网上搜一下,介绍很多的。建议先试一下在卸载或更改程序里面修复VS,看有没有效果。

  16. 楼主你好,我在调试您给的例子的时候遇到了以下问题怎么办?
    1>—— 已启动生成: 项目: openCVtest2, 配置: Debug Win32 ——
    1>生成启动时间为 2016/4/26 21:42:26。
    1>InitializeBuildStatus:
    1> 正在对“Debug\openCVtest2.unsuccessfulbuild”执行 Touch 任务。
    1>ClCompile:
    1> 所有输出均为最新。
    1> openCVtest2.cpp
    1>d:\算法程序\opencvtest2\opencvtest2\opencvtest2.cpp(2): warning C4627: “#include ”: 在查找预编译头使用时跳过
    1> 将指令添加到“StdAfx.h”或重新生成预编译头
    1>d:\算法程序\opencvtest2\opencvtest2\opencvtest2.cpp(3): warning C4627: “#include ”: 在查找预编译头使用时跳过
    1> 将指令添加到“StdAfx.h”或重新生成预编译头
    1>d:\算法程序\opencvtest2\opencvtest2\opencvtest2.cpp(4): warning C4627: “#include ”: 在查找预编译头使用时跳过
    1> 将指令添加到“StdAfx.h”或重新生成预编译头
    1>d:\算法程序\opencvtest2\opencvtest2\opencvtest2.cpp(5): warning C4627: “#include ”: 在查找预编译头使用时跳过
    1> 将指令添加到“StdAfx.h”或重新生成预编译头
    1>d:\算法程序\opencvtest2\opencvtest2\opencvtest2.cpp(48): fatal error C1010: 在查找预编译头时遇到意外的文件结尾。是否忘记了向源中添加“#include “StdAfx.h””?
    1>
    1>生成失败。
    1>
    1>已用时间 00:00:00.50
    ========== 生成: 成功 0 个,失败 1 个,最新 0 个,跳过 0 个 ==========

  17. 楼主你好,我在调试您给的例子的时候遇到了这样的问题:
    1>—— 已启动生成: 项目: openCVtest2, 配置: Debug Win32 ——
    1>生成启动时间为 2016/4/26 21:42:26。
    1>InitializeBuildStatus:
    1> 正在对“Debug\openCVtest2.unsuccessfulbuild”执行 Touch 任务。
    1>ClCompile:
    1> 所有输出均为最新。
    1> openCVtest2.cpp
    1>d:\算法程序\opencvtest2\opencvtest2\opencvtest2.cpp(2): warning C4627: “#include ”: 在查找预编译头使用时跳过
    1> 将指令添加到“StdAfx.h”或重新生成预编译头
    1>d:\算法程序\opencvtest2\opencvtest2\opencvtest2.cpp(3): warning C4627: “#include ”: 在查找预编译头使用时跳过
    1> 将指令添加到“StdAfx.h”或重新生成预编译头
    1>d:\算法程序\opencvtest2\opencvtest2\opencvtest2.cpp(4): warning C4627: “#include ”: 在查找预编译头使用时跳过
    1> 将指令添加到“StdAfx.h”或重新生成预编译头
    1>d:\算法程序\opencvtest2\opencvtest2\opencvtest2.cpp(5): warning C4627: “#include ”: 在查找预编译头使用时跳过
    1> 将指令添加到“StdAfx.h”或重新生成预编译头
    1>d:\算法程序\opencvtest2\opencvtest2\opencvtest2.cpp(48): fatal error C1010: 在查找预编译头时遇到意外的文件结尾。是否忘记了向源中添加“#include “StdAfx.h””?
    1>
    1>生成失败。
    1>
    1>已用时间 00:00:00.50
    ========== 生成: 成功 0 个,失败 1 个,最新 0 个,跳过 0 个 ==========

  18. 图片打开异常的大。。这是我电脑的问题咩

    当然还是要谢谢楼主!虽然配置过程中我自己的遇到了各种问题,通过楼主的答疑都慢慢的解决了!

  19. 调用堆栈:

    opencv car2.exe!main() 行73+0xf字节

    opencv car2.exe!-mainCRTStartup() 行555+0x19字节

    opencv car2.exe!mainCRTStartup 行371

    kernel32.dll76e7338a()

    下面的框架可能不正确或缺失,没有kernel32.dll加载符号

    ntdll.dll!775c9a0a()

    ntdll.dll! 775c99d5()

    大神,这是什么情况啊,还有个对话框说 使用简体中文(GB2312)编码加载文件e:\program  files(x86)\microsoft studio 10.0\vc\src\schedulerbase.cpp时,有些字节已用Unicode替换字符替换。保存盖文佳将不会保留文件内容。看在我纯手打的份上耐心解答一下吧,我是做毕业设计,刚刚接触opencv,谢谢了

     

     

    #include "cv.h"
    #include "highgui.h"
    #include <time.h>
    #include <math.h>
    #include <ctype.h>
    #include <stdio.h>
    #include <string>
    const double MHI_DURATION = 0.5;
    const int N = 3;
    const int CONTOUR_MAX_AERA = 800;//最小区域
    int last = 0;
    int nFrmNum = 0;
    bool FindCar=false;
    int No[5]={0,0,0,0,0};
    int sum[4]={0,0,0,0};

    IplImage **buf = 0;// ring image buffer
    IplImage *mhi = 0; // MHI: motion history image

    struct AvTrackBlock{
            int Direction;      //1表示进入区域,0表示离开区域
            int FramesTracked;  //已经跟踪到车辆的帧数。
            int avgX;           //车辆x方向中心
            int avgY;           //车辆y方向中心
        } TrackBlock[4][5];

    void DrawText(IplImage* pImg,char* text,CvPoint Point);
    void DrawCount(IplImage* pImg,int count,CvPoint Point);
    void AddBlobTrack(IplImage* img,int i,CvPoint pt_Rect);
    void update_mhi( IplImage* img, IplImage* dst, int diff_threshold );

    int main()
    {
        IplImage* motion = NULL; 
        IplImage* image;
        CvCapture* capture = NULL;

        capture = cvCaptureFromFile("F:\\01.avi");//打开文件
        if( !cvGrabFrame( capture ))    
            printf( "Can not open video file %s\n");
        cvNamedWindow( "Motion", 1 );        //窗口命名
        cvNamedWindow( "temp", 2 );        //窗口命名
        cvNamedWindow( "temp2", 3 );        //窗口命名
        cvNamedWindow( "temp3", 4 );        //窗口命名
    //    cvNamedWindow( "temp4", 4 );        //窗口命名
        cvMoveWindow("Motion", 0, 100 );
        cvMoveWindow("temp", 300, 100 );
        cvMoveWindow("temp2", 650, 100 );
        cvMoveWindow("temp3", 950, 100 );
    //    cvMoveWindow("temp4", 1200, 100 );
        for(int i=0;i<4;i++)        //初始化跟踪结构体
        for(int j=0;j<5;j++)
        {
            TrackBlock[i][j].Direction=0;
            TrackBlock[i][j].FramesTracked=0;
            TrackBlock[i][j].avgX=0;
            TrackBlock[i][j].avgY=0;
        }

                         
        if( capture )
        {
            while(image = cvQueryFrame(capture))//获取视频
            {       
                nFrmNum++; 
                image = cvRetrieveFrame(capture,0 );
                if(nFrmNum == 1)
                {     
                    motion = cvCreateImage( cvSize(image->width,image->height), 8, 1 );//创建图像
                    cvZero( motion );                                                //置0
                    motion->origin = image->origin;                                    //对其原点                  
                }
                update_mhi( image, motion, 60 );                                    //更新
                cvShowImage( "Motion", image );                                        //显示图像
                
                if( cvWaitKey(10) >= 0 )                                            //如果等待错过10  则跳出循环
                    break;
            }
            cvReleaseCapture( &capture );                                            //释放捕获
            cvDestroyWindow( "Motion" );                                            //销毁窗口
        }
        return 0;
    }

    //  参数:
    //  img – 输入视频帧
    //  dst – 检测结果
    void  update_mhi( IplImage* img, IplImage* dst, int diff_threshold )
    {
        double timestamp = clock()/100.; // get current time in seconds  
        int i, j, idx1, idx2;
        uchar val;
        float temp;
        int avgX1 = 0;
        int avgY1 = 0; 

        CvSize size = cvSize(img->width,img->height); // get current frame size
        IplImage* silh;
        /*********************************/IplImage* pyr = cvCreateImage( cvSize((size.width & -2)/2, (size.height & -2)/2), 8, 1 );
        /*-2补码 11111111 11111111 11111111 11111110   那么size.width & -2就是把最后一位width的最后一位置0,
          下面分析为什么要把最后一位置为0
          如果源图像的width为奇数,则通过和-2相与,最后一位设为0,相当于图像width减小了1,然后再除以2,刚好为源图像分配了一半的width*/
        CvMemStorage *stor;
        CvSeq *cont;
        CvPoint pt1_Rect,pt2_Rect,pt3_Rect,pt4_Rect,pt5_Rect,pt6_Rect,pt7_Rect,pt8_Rect,pt9_Rect,pt10_Rect,pt11_Rect;

        pt1_Rect.x=0;                        
        pt1_Rect.y=200;
        pt2_Rect.x=img->width;
        pt2_Rect.y=200;
        cvLine( img, pt1_Rect, pt2_Rect,CV_RGB(255,0,0) ,1,CV_AA, 0 );//画横边界线
        pt3_Rect.x=110;
        pt3_Rect.y=0;
        pt4_Rect.x=58;
        pt4_Rect.y=img->height;
        cvLine( img, pt3_Rect, pt4_Rect,CV_RGB(255,0,0) ,1,CV_AA, 0 );//第一条竖线
        pt5_Rect.x=135;
        pt5_Rect.y=0;
        pt6_Rect.x=140;
        pt6_Rect.y=img->height;
        cvLine( img, pt5_Rect, pt6_Rect,CV_RGB(255,0,0) ,1,CV_AA, 0 );//第二条竖线
        pt7_Rect.x=155;
        pt7_Rect.y=0;
        pt8_Rect.x=215;
        pt8_Rect.y=img->height;
        cvLine( img, pt7_Rect, pt8_Rect,CV_RGB(255,0,0) ,1,CV_AA, 0 );//第三条竖线
        //初始化
        for(int i=0;i<5;i++)
            No[i]=0;
        if( !mhi || mhi->width != size.width || mhi->height != size.height )//初始化 清空buf、mhi
        {
            if( buf == 0 ) 
            {
                buf = (IplImage**)malloc(N*sizeof(buf[0]));
                memset( buf, 0, N*sizeof(buf[0]));
            }        
            for( i = 0; i < N; i++ )                                    
            {
                cvReleaseImage( &buf[i] );
                buf[i] = cvCreateImage( size, IPL_DEPTH_8U, 1 );
                cvZero( buf[i] );
            }
            cvReleaseImage( &mhi );
            mhi = cvCreateImage( size, IPL_DEPTH_32F, 1 );
            cvZero( mhi ); // clear MHI at the beginning
        } // end of if(mhi)
        
        cvCvtColor( img, buf[last], CV_BGR2GRAY ); // 图像灰度化
        
        idx1 = last;
        idx2 = (last + 1) % N; //调整 index of (last – (N-1))th frame 
        last = idx2;
        // 做帧差
        silh = buf[idx2];
        
        cvAbsDiff( buf[idx1], buf[idx2], silh ); // 得到两图的不同

        // 对差图像做二值化
        cvThreshold( silh, silh, 45, 255, CV_THRESH_BINARY ); // and threshold it
        cvShowImage( "temp",   silh);

        cvUpdateMotionHistory( silh, mhi, timestamp, MHI_DURATION ); //去掉影像(silhouette) 以更新运动历史图像 把MHI变为8位的图像
                                                                                                        //MHI(motion history image) 中在运动发生的象素点被设置为当前时间戳,而运动发生较久的象素点被清除。
        cvCvtScale( mhi, dst, 255./MHI_DURATION, (MHI_DURATION – timestamp)*255./MHI_DURATION ); //dst = mhi*255./MHI_DURATION+(MHI_DURATION – timestamp)*255./MHI_DURATION
        cvCvtScale( mhi, dst, 255./MHI_DURATION, 0 );    //dst = mhi*255./MHI_DURATION+0  图像格式的的选择依赖于 filename 的 只有 8 位单通道 用 cvCvtScale 和 cvCvtColor 转换
         // 中值滤波,简单滤波、高斯滤波,消除小的噪声
        /*cvSmooth(dst,dst,CV_GAUSSIAN,3,3,0);
        cvSmooth(dst,dst,CV_GAUSSIAN,3,3,0);
        cvSmooth( dst, dst, CV_MEDIAN, 3, 0, 0, 0 );
        cvSmooth(dst,dst,CV_BLUR,3,3,0);*/

        //DrawCount(dst,No[5],cvPoint(100,100));    //写计数值
        //DrawCount(dst,sum[0],cvPoint(10,200));    //写计数值
        //DrawCount(dst,sum[1],cvPoint(80,200));
        //DrawCount(dst,sum[2],cvPoint(140,200));
        //DrawCount(dst,sum[3],cvPoint(220,200));
        /******************************************/    

        // 向下采样,去掉噪声
        cvPyrDown( dst, pyr, 7 );
        cvErode( pyr,pyr, NULL,1); //腐蚀

        
        cvDilate( pyr, pyr, 0, 1 );  // 做膨胀操作,消除目标的不连续空洞
        cvPyrUp( pyr, dst, 7 );

         // 中值滤波,滤波、高斯滤波,消除小的噪声
        //cvSmooth(dst,dst,CV_BLUR,3,3,0);
        cvSmooth( dst, dst, CV_MEDIAN, 3, 0, 0, 0 );    
           cvShowImage( "temp2",silh);
        cvSmooth(dst,dst,CV_GAUSSIAN,3,3,0);
        cvShowImage( "temp3",dst );
    //    cvShowImage( "temp3",dst );
        // 下面的程序段用来找到轮廓
        //
        // Create dynamic structure and sequence.
        //用opencv提取轮廓的时候,就要申请一块内存来存储找到的轮廓序列,所以你可以看到用轮廓函数的时候前面都有这么一条语句。
        //调试程序的时候可以设个断点到你可以看到这块内存的大小和你找到的轮廓数量以及顶点个数有关。
        stor = cvCreateMemStorage(0);
        cont = cvCreateSeq(CV_SEQ_ELTYPE_POINT, sizeof(CvSeq), sizeof(CvPoint) , stor);
       
        // 找到所有轮廓
        cvFindContours( dst, stor, &cont, sizeof(CvContour), 
                        CV_RETR_LIST, CV_CHAIN_APPROX_SIMPLE, cvPoint(0,0));    
        // 直接使用CONTOUR中的矩形来画轮廓
        for(;cont;cont = cont->h_next)    //遍历所有轮廓
        {

            CvRect r = ((CvContour*)cont)->rect;    //去除轮廓边界
            avgX1 = (r.x + r.x + r.width) / 2; 
            avgY1 = (r.y + r.y + r.height) / 2;            
            pt11_Rect.x=(r.x + r.x + r.width) / 2;
            pt11_Rect.y=(r.y + r.y + r.height) / 2;                
            if(r.height * r.width > CONTOUR_MAX_AERA) //当轮廓满足一定条件(过滤噪声)
            {
                pt9_Rect.x = r.x;
                pt9_Rect.y = r.y;
                pt10_Rect.x = r.x + r.width;
                pt10_Rect.y = r.y +r.height;//得到左下角和右上角两个坐标
                if((r.y+r.height)<200)                    //未过界画绿色
                      {
                          cvRectangle( img, cvPoint(r.x,r.y), cvPoint(r.x + r.width, r.y + r.height),CV_RGB(0,0,255), 1, CV_AA,0);
                         // No[5]++;
                      }
                else 
                {
                    cvRectangle( img, pt9_Rect, pt10_Rect,CV_RGB(255,0,0), 1, CV_AA,0);
                    if(0<=avgX1&&avgX1<60&& avgY1 > 200/* && avgY1 < 220*/)        //如果车辆进入到了感兴趣区域  第一车道                                        
                        AddBlobTrack(img,0,pt11_Rect);                    
                    else if(60<=avgX1&&avgX1<138&& avgY1 > 200 /*&& avgY1 < 220*/)    //如果车辆进入到了感兴趣区域  第二车道    
                    {                    
                        AddBlobTrack(img,1,pt11_Rect);
                    }
                    else if(138<=avgX1&&avgX1<215&& avgY1 > 200/* && avgY1 < 220*/)    //如果车辆进入到了感兴趣区域  第三车道
                    {            
                        
                        AddBlobTrack(img,2,pt11_Rect);
                    }
                    else if(215<=avgX1&&avgX1<img->width&& avgY1 > 200 /*&& avgY1 < 220*/)//如果车辆进入到了感兴趣区域  第四车道
                    {            
                    
                        AddBlobTrack(img,3,pt11_Rect);
                    }
                }
            }
        }
        for(int i=0;i<4;i++)    //出了感兴趣区域。
        for(int j=0;j<5;j++)
            if(TrackBlock[i][j].FramesTracked != nFrmNum&&TrackBlock[i][j].FramesTracked!=0)
            {
                
                TrackBlock[i][j].Direction=0;
                TrackBlock[i][j].FramesTracked=0;
                TrackBlock[i][j].avgX=0;
                TrackBlock[i][j].avgY=0;
                sum[i]++;
            }
        No[5]=sum[0]+sum[1]+sum[2]+sum[3];
        DrawCount(img,No[5],cvPoint(100,100));    //写计数值
        DrawCount(img,sum[0],cvPoint(10,200));    //写计数值
        DrawCount(img,sum[1],cvPoint(80,200));
        DrawCount(img,sum[2],cvPoint(140,200));
        DrawCount(img,sum[3],cvPoint(220,200));

        
        // 释放内存
        cvReleaseMemStorage(&stor);
        cvReleaseImage( &pyr );
    }

    void DrawText(IplImage* pImg,char* text,CvPoint Point)
    {
        CvFont font;//初始化字体格式;
        cvInitFont(&font, CV_FONT_HERSHEY_SIMPLEX, 0.4, 0.4, 0, 1, 8);
        cvPutText( pImg, text, Point, &font, cvScalar(0,0,255));
    }

    void DrawCount(IplImage* pImg,int count,CvPoint Point)
    {
        char data[64];
        memset(data,0,64);
        sprintf(data,"Count:%d",count);
        DrawText(pImg,data,Point);
    }
    void AddBlobTrack(IplImage* img,int i,CvPoint pt_Rect)
    {
        for(int j=0;j<5;j++)
            if(TrackBlock[i][j].avgX !=0 && abs(pt_Rect.x-TrackBlock[i][j].avgX)<20 && 
                abs(pt_Rect.y-TrackBlock[i][j].avgY)<20)//避免车辆轮廓重复检测
            {
                TrackBlock[i][j].FramesTracked=nFrmNum;
                TrackBlock[i][j].avgX=pt_Rect.x;
                TrackBlock[i][j].avgY=pt_Rect.y;
                j=5;
                FindCar=true;
            }                        
        if(FindCar!=true && pt_Rect.y>200)
        {
            TrackBlock[i][No[i]].Direction=1;
            TrackBlock[i][No[i]].FramesTracked=nFrmNum;
            TrackBlock[i][No[i]].avgX=pt_Rect.x;
            TrackBlock[i][No[i]].avgY=pt_Rect.y;
            if(No[i]==5)
                No[i]=0;                            
            else
                No[i]++;                                                             
        }                        
        FindCar=false;                
     }
     

      1. 在我的PC上(vs2012,opencv3.1),在include部分添加了一行:

        #include <opencv2\optflow\motempl.hpp>

        把cvUpdateMotionHistory()那行替换成以下三行:

        cv::Mat mhi_mat = cv::cvarrToMat(mhi);
        cv::motempl::updateMotionHistory( cv::cvarrToMat(silh), mhi_mat, timestamp, MHI_DURATION ); //去掉影像(silhouette) 以更新运动历史图像 把MHI变为8位的图像
        *mhi = IplImage(mhi_mat);

        可以运行。不知你用的是什么开发环境?

    1. 我试了一下这段程序,只发现了164行的减号打错,以及cvUpdateMotionHistory()引起的链接错误。并没有发现像你这样的错误。但是可以肯定错误是在update_mhi()这个函数内产生的。建议用断点找一下在哪一行出现的问题。

      我使用的是OpenCV 3.1,在3.1中updateMotionHistory()已经被转移到了opencv_contrib/optflow下,但是cvUpdateMotionHistory()的声明仍然在video/tracking_c.h之中。虽然我编译了完整的opencv和opencv_contrib,也链接了opencv_video310.lib和opencv_optflow310.lib,但是仍然有链接错误。时间允许的话,建议把代码换成C++版本,可以避免一些这样的问题。

  20. 您好,请问这是什么情况啊?求大神解答,谢谢

    1>—— 已启动生成: 项目: test_15_12_21, 配置: Debug Win32 ——
    1>  test_15_12_21Dlg.cpp
    1>i:\test_15_12_21\test_15_12_21dlg.h(6): fatal error C1083: 无法打开包括文件:“opencv2/opencv.hpp”: No such file or directory
    1>  test_15_12_21.cpp
    1>i:\test_15_12_21\test_15_12_21dlg.h(6): fatal error C1083: 无法打开包括文件:“opencv2/opencv.hpp”: No such file or directory
    1>  CvvImage.cpp
    1>i:\test_15_12_21\cvvimage.h(4): fatal error C1083: 无法打开包括文件:“opencv/cv.h”: No such file or directory
    1>  CobjectDetect.cpp
    1>i:\test_15_12_21\cobjectdetect.h(2): fatal error C1083: 无法打开包括文件:“opencv2/opencv.hpp”: No such file or directory
    1>  正在生成代码…
    ========== 生成: 成功 0 个,失败 1 个,最新 0 个,跳过 0 个 ==========
     

  21. 博主,你好,我按照你说的配置完成后,编译出现下面的错误是怎么回事啊?

    错误: error C1083: 无法打开预编译头文件:“Debug\OpencvTest.pch”: No such file or directory    

    有时间可以帮我看一下么,万分感谢

    1. 看来你的问题已经解决:)

      另:cin.get()只是起到让程序暂停方便查看控制台错误信息的作用;

      文件路径中也是可以出现中文的,需要注意文件夹层级之间用双斜线“\\”分隔。

      1. 你好,如果只含英文的目录,层级之间也需要用双斜线“\\”分割,因为我用单斜线的时候虽然没有出错,但是有警告

  22. OpencvTest.exe 中的 0x750ac52f 处有未经处理的异常: Microsoft C++ 异常: 内存位置 0x0043f750 处的 cv::Exception。

    麻烦大神给看看吧

    1. 单从内存异常还不足以判断错误产生的原因,能否提供更详细的信息?比如控制台的输出或者用断点寻找一下是在哪一行出的错误。

      1. #include<iostream>  

            #include <opencv2/core/core.hpp>  

            #include <opencv2/highgui/highgui.hpp>  

              

              

            using namespace cv;  

              

              

            int main()  

            {  

                // 读入一张图片(游戏原画)  

                Mat img=imread("pic.jpg");  

                // 创建一个名为 "游戏原画"窗口  

                cvNamedWindow("游戏原画");  

                // 在窗口中显示游戏原画  

                imshow("游戏原画",img);  

                // 等待6000 ms后窗口自动关闭  

                waitKey(6000);  

            } 

        为啥用这个程序就会内存报错,

        “test.exe”: 已加载“D:\program files\test\Debug\test.exe”,已加载符号。

        “test.exe”: 已加载“C:\Windows\System32\ntdll.dll”,Cannot find or open the PDB file

        “test.exe”: 已加载“C:\Windows\System32\kernel32.dll”,Cannot find or open the PDB file

        “test.exe”: 已加载“C:\Windows\System32\KernelBase.dll”,Cannot find or open the PDB file

        “test.exe”: 已加载“C:\Windows\opencv_core249d.dll”,Cannot find or open the PDB file

        “test.exe”: 已加载“C:\Windows\System32\msvcp100d.dll”,已加载符号。

        “test.exe”: 已加载“C:\Windows\System32\msvcr100d.dll”,已加载符号。

        “test.exe”: 已加载“C:\Windows\opencv_highgui249d.dll”,Cannot find or open the PDB file

        “test.exe”: 已加载“C:\Windows\System32\user32.dll”,Cannot find or open the PDB file

        “test.exe”: 已加载“C:\Windows\System32\gdi32.dll”,Cannot find or open the PDB file

        “test.exe”: 已加载“C:\Windows\System32\lpk.dll”,Cannot find or open the PDB file

        “test.exe”: 已加载“C:\Windows\System32\usp10.dll”,Cannot find or open the PDB file

        “test.exe”: 已加载“C:\Windows\System32\msvcrt.dll”,Cannot find or open the PDB file

        “test.exe”: 已加载“C:\Windows\System32\ole32.dll”,Cannot find or open the PDB file

        “test.exe”: 已加载“C:\Windows\System32\rpcrt4.dll”,Cannot find or open the PDB file

        “test.exe”: 已加载“C:\Windows\System32\oleaut32.dll”,Cannot find or open the PDB file

        “test.exe”: 已加载“C:\Windows\System32\advapi32.dll”,Cannot find or open the PDB file

        “test.exe”: 已加载“C:\Windows\System32\sechost.dll”,Cannot find or open the PDB file

        “test.exe”: 已加载“C:\Windows\winsxs\x86_microsoft.windows.common-controls_6595b64144ccf1df_5.82.7601.18837_none_ec86b8d6858ec0bc\comctl32.dll”,Cannot find or open the PDB file

        “test.exe”: 已加载“C:\Windows\System32\avifil32.dll”,Cannot find or open the PDB file

        “test.exe”: 已加载“C:\Windows\System32\winmm.dll”,Cannot find or open the PDB file

        “test.exe”: 已加载“C:\Windows\System32\msacm32.dll”,Cannot find or open the PDB file

        “test.exe”: 已加载“C:\Windows\System32\msvfw32.dll”,Cannot find or open the PDB file

        “test.exe”: 已加载“C:\Windows\System32\shell32.dll”,Cannot find or open the PDB file

        “test.exe”: 已加载“C:\Windows\System32\shlwapi.dll”,Cannot find or open the PDB file

        “test.exe”: 已加载“C:\Windows\System32\avicap32.dll”,Cannot find or open the PDB file

        “test.exe”: 已加载“C:\Windows\System32\version.dll”,Cannot find or open the PDB file

        “test.exe”: 已加载“C:\Windows\System32\imm32.dll”,Cannot find or open the PDB file

        “test.exe”: 已加载“C:\Windows\System32\msctf.dll”,Cannot find or open the PDB file

        “test.exe”: 已加载“C:\Windows\System32\uxtheme.dll”,Cannot find or open the PDB file

        “test.exe”: 已加载“C:\Windows\System32\dwmapi.dll”,Cannot find or open the PDB file

        “test.exe”: 已加载“C:\Windows\System32\cryptbase.dll”,Cannot find or open the PDB file

        test.exe 中的 0x7504812f 处最可能的异常: Microsoft C++ 异常: 内存位置 0x0013f9ac 处的 cv::Exception。

        test.exe 中的 0x7504812f 处有未经处理的异常: Microsoft C++ 异常: 内存位置 0x0013f9ac 处的 cv::Exception。

        程序“[1756] test.exe: 本机”已退出,返回值为 -529697949 (0xe06d7363)。

         

        但用你给的这个程序就可以正常显示,

        1. 首先要确定图像文件的路径是否正确,pic.jpg要放在与test.cpp同一个文件夹内;

          如果你使用的OpenCV是3.*版本,图像解码模块被单独放在了imgcodecs模块内,所以还要在第4行加上#include ,不过保险起见,所有opencv的头文件其实可以用一行#include 来代替。

          1. 之前没注意错误信息里的“C:\Windows\opencv_core249d.dll”,应该是环境变量的问题。如果你用的是2.4.9版本的话,要确认用户环境变量path的值有一项是“build\x86\vc11\bin”。修改环境变量之后要用控制台刷新一下,然后重启vs

          2. 我在path里添加了x86/vc11重启了电脑后还是不行。

            “yfs.exe”: 已加载“D:\program files\yfs\Debug\yfs.exe”,已加载符号。
            “yfs.exe”: 已加载“C:\Windows\System32\ntdll.dll”,已加载符号(去除源信息)。
            “yfs.exe”: 已加载“C:\Windows\System32\kernel32.dll”,已加载符号(去除源信息)。
            “yfs.exe”: 已加载“C:\Windows\System32\KernelBase.dll”,已加载符号(去除源信息)。
            “yfs.exe”: 已加载“C:\Windows\opencv_core249d.dll”,Cannot find or open the PDB file
            “yfs.exe”: 已加载“C:\Windows\System32\msvcp100d.dll”,已加载符号。
            “yfs.exe”: 已加载“C:\Windows\System32\msvcr100d.dll”,已加载符号。
            “yfs.exe”: 已加载“C:\Windows\opencv_highgui249d.dll”,Cannot find or open the PDB file
            “yfs.exe”: 已加载“C:\Windows\System32\user32.dll”,已加载符号(去除源信息)。
            “yfs.exe”: 已加载“C:\Windows\System32\gdi32.dll”,已加载符号(去除源信息)。
            “yfs.exe”: 已加载“C:\Windows\System32\lpk.dll”,已加载符号(去除源信息)。
            “yfs.exe”: 已加载“C:\Windows\System32\usp10.dll”,已加载符号(去除源信息)。
            “yfs.exe”: 已加载“C:\Windows\System32\msvcrt.dll”,已加载符号(去除源信息)。
            “yfs.exe”: 已加载“C:\Windows\System32\ole32.dll”,已加载符号。
            “yfs.exe”: 已加载“C:\Windows\System32\rpcrt4.dll”,已加载符号(去除源信息)。
            “yfs.exe”: 已加载“C:\Windows\System32\oleaut32.dll”,已加载符号(去除源信息)。
            “yfs.exe”: 已加载“C:\Windows\System32\advapi32.dll”,已加载符号(去除源信息)。
            “yfs.exe”: 已加载“C:\Windows\System32\sechost.dll”,已加载符号(去除源信息)。
            “yfs.exe”: 已加载“C:\Windows\winsxs\x86_microsoft.windows.common-controls_6595b64144ccf1df_5.82.7601.18837_none_ec86b8d6858ec0bc\comctl32.dll”,已加载符号(去除源信息)。
            “yfs.exe”: 已加载“C:\Windows\System32\avifil32.dll”,已加载符号(去除源信息)。
            “yfs.exe”: 已加载“C:\Windows\System32\winmm.dll”,已加载符号(去除源信息)。
            “yfs.exe”: 已加载“C:\Windows\System32\msacm32.dll”,已加载符号(去除源信息)。
            “yfs.exe”: 已加载“C:\Windows\System32\msvfw32.dll”,已加载符号(去除源信息)。
            “yfs.exe”: 已加载“C:\Windows\System32\shell32.dll”,已加载符号(去除源信息)。
            “yfs.exe”: 已加载“C:\Windows\System32\shlwapi.dll”,已加载符号(去除源信息)。
            “yfs.exe”: 已加载“C:\Windows\System32\avicap32.dll”,已加载符号(去除源信息)。
            “yfs.exe”: 已加载“C:\Windows\System32\version.dll”,已加载符号(去除源信息)。
            “yfs.exe”: 已加载“C:\Windows\opencv_imgproc249d.dll”,Cannot find or open the PDB file
            “yfs.exe”: 已加载“C:\Windows\System32\imm32.dll”,已加载符号(去除源信息)。
            “yfs.exe”: 已加载“C:\Windows\System32\msctf.dll”,已加载符号(去除源信息)。
            程序“[3636] yfs.exe: 本机”已退出,返回值为 -1 (0xffffffff)。
             

          3. 这是用的另外一段代码吧?返回值为-1,很有可能是程序已经正确编译运行,只是由于代码中某个步骤的检查没有通过(比如文中的if(srcImg.empty()))。

          4. 就用的是上面的程序,而且我发现我的附加依赖项添加的

                            opencv_calib3d2410.lib
                            opencv_contrib24
            10.lib
                            opencv_core24
            10.lib
                            opencv_features2d24
            10.lib
                            opencv_flann24
            10.lib
                            opencv_gpu24
            10.lib
                            opencv_highgui24
            10.lib
                            opencv_imgproc24
            10.lib
                            opencv_legacy24
            10.lib
                            opencv_ml24
            10.lib
                            opencv_objdetect24
            10.lib
                            opencv_ts24
            10.lib
                            opencv_video24
            10.lib

            这些都跑到继承的值中去了,这些会不会对结果产生影响,

          5. 同一个项目opencv版本不变的话不会有太大影响,不过新建项目也有这些值的话就会比较麻烦。

            你给的那段代码确实没有问题。你之前是不是修改过MSBuild或VC目录下的配置文件?

          6. 我重新下载了一个vs2013,然后重装后可以使用了。谢谢博主的指导。

  23. 博主你好,请教一个问题,困扰好久了
    我是WIN 8.1 64位 配置的VS2010+openCV2.3.1
    程序能成功连接生成,但运行出错
    “test1.exe”: 已加载“D:\VS文件\test1\x64\Debug\test1.exe”,已加载符号。
    “test1.exe”: 已加载“C:\Windows\System32\ntdll.dll”,Cannot find or open the PDB file
    “test1.exe”: 已加载“C:\Windows\System32\kernel32.dll”,Cannot find or open the PDB file
    “test1.exe”: 已加载“C:\Windows\System32\KernelBase.dll”,Cannot find or open the PDB file
    “test1.exe”: 已加载“D:\学习\opencv\build\x64\vc10\bin\opencv_core231d.dll”,Cannot find or open the PDB file
    “test1.exe”: 已加载“D:\学习\opencv\build\x64\vc10\bin\opencv_highgui231d.dll”,Cannot find or open the PDB file
    “test1.exe”: 已加载“D:\学习\opencv\build\x64\vc9\bin\opencv_imgproc231d.dll”,Cannot find or open the PDB file
    “test1.exe”: 已加载“C:\Windows\System32\msvcr100d.dll”,已加载符号。
    “test1.exe”: 已加载“C:\Windows\System32\msvcp100d.dll”,已加载符号。
    “test1.exe”: 已加载“C:\Windows\System32\user32.dll”,Cannot find or open the PDB file
    “test1.exe”: 已加载“C:\Windows\System32\gdi32.dll”,Cannot find or open the PDB file
    “test1.exe”: 已加载“C:\Windows\System32\ole32.dll”,Cannot find or open the PDB file
    “test1.exe”: 已加载“C:\Windows\System32\oleaut32.dll”,Cannot find or open the PDB file
    “test1.exe”: 已加载“C:\Windows\System32\advapi32.dll”,Cannot find or open the PDB file
    “test1.exe”: 已加载“C:\Windows\WinSxS\amd64_microsoft.windows.common-controls_6595b64144ccf1df_5.82.9600.16384_none_34a8918f959016ea\comctl32.dll”,Cannot find or open the PDB file
    “test1.exe”: 已加载“C:\Windows\System32\avifil32.dll”,Cannot find or open the PDB file
    “test1.exe”: 已加载“C:\Windows\System32\msvfw32.dll”,Cannot find or open the PDB file
    “test1.exe”: 已加载“C:\Windows\System32\avicap32.dll”,Cannot find or open the PDB file
    程序“[10676] test1.exe: 本机”已退出,返回值为 -1072365566 (0xc0150002)。

    我设置的路径都是VC10的,不知道为什么会有这一句VC9的东西: test1.exe”: 已加载“D:\学习\opencv\build\x64\vc9\bin\opencv_imgproc231d.dll”,Cannot find or open the PDB file
    另外一个插曲是,我之前跑的一个打开图片的小程序,也是提示VC9里面两个文件找不到PDB file.然后我去VC9里把那两个文件删了程序能正常运行。但这个程序里按照之前方法删文件会提示文件缺失。
    希望博主能解答啊 先谢过了

    1. 这是新建的项目还是老项目?出现vc9确实有些奇怪。如果不是太麻烦的话,新建一个项目,把所有代码拷贝过来,再仔细检查一下(用户和系统)环境变量。还要注意修改环境变量之后,除了用cmd刷新使其生效,还要重启vs才行。

  24. 博主,error MSB4030:"No(/INCREMENTAL:NO)"对于"Link"任务的"LinkIncremental"参数是无效值。"LinkIncremental"参数类型为"System.Boolean"。是什么意思,刚开始学,希望博主解答

  25. “OPENCVTEST.exe”: 已加载“D:\AAA\VC++\project\OPENCVTEST\Debug\OPENCVTEST.exe”,已加载符号。
    “OPENCVTEST.exe”: 已加载“C:\Windows\SysWOW64\ntdll.dll”,已加载符号(去除源信息)。
    “OPENCVTEST.exe”: 已加载“C:\Windows\SysWOW64\kernel32.dll”,已加载符号(去除源信息)。
    “OPENCVTEST.exe”: 已加载“C:\Windows\SysWOW64\KernelBase.dll”,已加载符号(去除源信息)。
    “OPENCVTEST.exe”: 已加载“E:\OPEN\opencv\build\x86\vc10\bin\opencv_core249d.dll”,Cannot find or open the PDB file
    “OPENCVTEST.exe”: 已加载“C:\Windows\SysWOW64\msvcp100d.dll”,已加载符号。
    “OPENCVTEST.exe”: 已加载“C:\Windows\SysWOW64\msvcr100d.dll”,已加载符号。
    “OPENCVTEST.exe”: 已加载“E:\OPEN\opencv\build\x86\vc10\bin\opencv_highgui249d.dll”,Cannot find or open the PDB file
    “OPENCVTEST.exe”: 已加载“C:\Windows\SysWOW64\user32.dll”,已加载符号(去除源信息)。
    “OPENCVTEST.exe”: 已加载“C:\Windows\SysWOW64\gdi32.dll”,已加载符号(去除源信息)。
    “OPENCVTEST.exe”: 已加载“C:\Windows\SysWOW64\lpk.dll”,已加载符号(去除源信息)。
    “OPENCVTEST.exe”: 已加载“C:\Windows\SysWOW64\usp10.dll”,已加载符号(去除源信息)。
    “OPENCVTEST.exe”: 已加载“C:\Windows\SysWOW64\msvcrt.dll”,已加载符号(去除源信息)。
    “OPENCVTEST.exe”: 已加载“C:\Windows\SysWOW64\advapi32.dll”,已加载符号(去除源信息)。
    “OPENCVTEST.exe”: 已加载“C:\Windows\SysWOW64\sechost.dll”,已加载符号(去除源信息)。
    “OPENCVTEST.exe”: 已加载“C:\Windows\SysWOW64\rpcrt4.dll”,已加载符号(去除源信息)。
    “OPENCVTEST.exe”: 已加载“C:\Windows\SysWOW64\sspicli.dll”,已加载符号(去除源信息)。
    “OPENCVTEST.exe”: 已加载“C:\Windows\SysWOW64\cryptbase.dll”,已加载符号(去除源信息)。
    “OPENCVTEST.exe”: 已加载“C:\Windows\SysWOW64\ole32.dll”,已加载符号。
    “OPENCVTEST.exe”: 已加载“C:\Windows\SysWOW64\oleaut32.dll”,已加载符号(去除源信息)。
    “OPENCVTEST.exe”: 已加载“C:\Windows\winsxs\x86_microsoft.windows.common-controls_6595b64144ccf1df_5.82.7601.18837_none_ec86b8d6858ec0bc\comctl32.dll”,已加载符号(去除源信息)。
    “OPENCVTEST.exe”: 已加载“C:\Windows\SysWOW64\avifil32.dll”,已加载符号(去除源信息)。
    “OPENCVTEST.exe”: 已加载“C:\Windows\SysWOW64\winmm.dll”,已加载符号(去除源信息)。
    “OPENCVTEST.exe”: 已加载“C:\Windows\SysWOW64\msacm32.dll”,已加载符号(去除源信息)。
    “OPENCVTEST.exe”: 已加载“C:\Windows\SysWOW64\msvfw32.dll”,已加载符号(去除源信息)。
    “OPENCVTEST.exe”: 已加载“C:\Windows\SysWOW64\shell32.dll”,已加载符号(去除源信息)。
    “OPENCVTEST.exe”: 已加载“C:\Windows\SysWOW64\shlwapi.dll”,已加载符号(去除源信息)。
    “OPENCVTEST.exe”: 已加载“C:\Windows\SysWOW64\avicap32.dll”,已加载符号(去除源信息)。
    “OPENCVTEST.exe”: 已加载“C:\Windows\SysWOW64\version.dll”,已加载符号(去除源信息)。
    “OPENCVTEST.exe”: 已加载“E:\OPEN\opencv\build\x86\vc10\bin\opencv_imgproc249d.dll”,Cannot find or open the PDB file
    “OPENCVTEST.exe”: 已加载“C:\Windows\SysWOW64\imm32.dll”,已加载符号(去除源信息)。
    “OPENCVTEST.exe”: 已加载“C:\Windows\SysWOW64\msctf.dll”,已加载符号(去除源信息)。
    程序“[4408] OPENCVTEST.exe: 本机”已退出,返回值为 -1 (0xffffffff)。

    求博主帮忙看看是什么问题呢

    1. 返回值为-1,可以在return -1那里加一个断点,看看控制台的输出。如果是一般的错误的话,程序本身会输出一些错误提示的。也许是图片的路径不正确之类。
      另外每次修改环境变量之后,vs都要重启才能保证新设置的环境变量值生效。

      1. 1>—— 已启动生成: 项目: TEST, 配置: Debug Win32 ——
        1>生成启动时间为 2016/3/21 星期一 下午 7:31:48。
        1>InitializeBuildStatus:
        1>  正在创建“Debug\TEST.unsuccessfulbuild”,因为已指定“AlwaysCreate”。
        1>ClCompile:
        1>  imread.cpp
        1>d:\vc++\project\test\test\imread.cpp(40): error C2065: “timeSpent”: 未声明的标识符
        1>d:\vc++\project\test\test\imread.cpp(40): error C2065: “timeSpent”: 未声明的标识符
        1>d:\vc++\project\test\test\imread.cpp(41): error C2065: “timeSpent”: 未声明的标识符
        1>
        1>生成失败。
        1>
        1>已用时间 00:00:01.83
        ========== 生成: 成功 0 个,失败 1 个,最新 0 个,跳过 0 个 ==========

        博主,我设断点后出现这个,帮我看一下这个是什么意思?我刚刚学习,不是很明白。谢谢

         

          1. 非常感谢博主的热心帮助,问题解决了,是我下载的OPENCV有问题,换了一个就好了,教程非常不错!!!

  26. #include
    #include
    #include
    using namespace cv;
    using namespace std;
    int main()
    {
    Mat img = imread(“E:/pic/001.jpg”);
    if(img.empty())
    {
    cout<LINK : fatal error LNK1104: 无法打开文件“opencv_imgproc2479.lib”
    请问这是什么错误?

    1. #include <opencv2\opencv.hpp>
      #include <iostream>
      #include <string>

      代码的头文件没显示出来,希望博主解答,谢谢!

      1. 这是因为lib文件名有误。如果你下载的OpenCV版本是2.4.9,就要在Linker->Input里输入opencv_imgproc249.lib等等形式如***249.lib的名称;如果是2.4.7,就要输入***247.lib(估计官网已经下载不到2.4.7版本了);如果是2.4.10,就要输入***2410.lib。总之,根据下载的OpenCV版本修改对应的文件名称:)

  27. 1>—— Rebuild All started: Project: Video_broadcast_01_20160210, Configuration: Debug Win32 ——
    1>  stdafx.cpp
    1>  Video_broadcast_01_20160210.cpp
    1>  Video_broadcast_01_20160210.vcxproj -> D:\OpenCV\opencv_execise\Video_broadcast_01_20160210\Debug\Video_broadcast_01_20160210.exe
    ========== Rebuild All: 1 succeeded, 0 failed, 0 skipped ==========

     

    'Video_broadcast_01_20160210.exe' (Win32): Loaded 'D:\OpenCV\opencv_execise\Video_broadcast_01_20160210\Debug\Video_broadcast_01_20160210.exe'. Symbols loaded.
    'Video_broadcast_01_20160210.exe' (Win32): Loaded 'C:\Windows\SysWOW64\ntdll.dll'. Symbols loaded.
    'Video_broadcast_01_20160210.exe' (Win32): Loaded 'C:\Windows\SysWOW64\kernel32.dll'. Symbols loaded.
    'Video_broadcast_01_20160210.exe' (Win32): Loaded 'C:\Windows\SysWOW64\KernelBase.dll'. Symbols loaded.
    'Video_broadcast_01_20160210.exe' (Win32): Loaded 'C:\Windows\system\opencv_world300d.dll'. Cannot find or open the PDB file.
    'Video_broadcast_01_20160210.exe' (Win32): Loaded 'C:\Windows\SysWOW64\user32.dll'. Symbols loaded.
    'Video_broadcast_01_20160210.exe' (Win32): Loaded 'C:\Windows\SysWOW64\gdi32.dll'. Symbols loaded.
    'Video_broadcast_01_20160210.exe' (Win32): Loaded 'C:\Windows\SysWOW64\lpk.dll'. Symbols loaded.
    'Video_broadcast_01_20160210.exe' (Win32): Loaded 'C:\Windows\SysWOW64\usp10.dll'. Symbols loaded.
    'Video_broadcast_01_20160210.exe' (Win32): Loaded 'C:\Windows\SysWOW64\msvcrt.dll'. Symbols loaded.
    'Video_broadcast_01_20160210.exe' (Win32): Loaded 'C:\Windows\SysWOW64\advapi32.dll'. Symbols loaded.
    'Video_broadcast_01_20160210.exe' (Win32): Loaded 'C:\Windows\SysWOW64\sechost.dll'. Symbols loaded.
    'Video_broadcast_01_20160210.exe' (Win32): Loaded 'C:\Windows\SysWOW64\rpcrt4.dll'. Symbols loaded.
    'Video_broadcast_01_20160210.exe' (Win32): Loaded 'C:\Windows\SysWOW64\sspicli.dll'. Symbols loaded.
    'Video_broadcast_01_20160210.exe' (Win32): Loaded 'C:\Windows\SysWOW64\cryptbase.dll'. Symbols loaded.
    'Video_broadcast_01_20160210.exe' (Win32): Loaded 'C:\Windows\SysWOW64\ole32.dll'. Symbols loaded.
    'Video_broadcast_01_20160210.exe' (Win32): Loaded 'C:\Windows\SysWOW64\oleaut32.dll'. Symbols loaded.
    'Video_broadcast_01_20160210.exe' (Win32): Loaded 'C:\Windows\SysWOW64\comdlg32.dll'. Symbols loaded.
    'Video_broadcast_01_20160210.exe' (Win32): Loaded 'C:\Windows\SysWOW64\shlwapi.dll'. Symbols loaded.
    'Video_broadcast_01_20160210.exe' (Win32): Loaded 'C:\Windows\winsxs\x86_microsoft.windows.common-controls_6595b64144ccf1df_5.82.7600.16661_none_ebfb56996c72aefc\comctl32.dll'. Symbols loaded.
    'Video_broadcast_01_20160210.exe' (Win32): Loaded 'C:\Windows\SysWOW64\shell32.dll'. Symbols loaded.
    'Video_broadcast_01_20160210.exe' (Win32): Loaded 'C:\Windows\SysWOW64\msvfw32.dll'. Symbols loaded.
    'Video_broadcast_01_20160210.exe' (Win32): Loaded 'C:\Windows\SysWOW64\winmm.dll'. Symbols loaded.
    'Video_broadcast_01_20160210.exe' (Win32): Loaded 'C:\Windows\SysWOW64\avifil32.dll'. Symbols loaded.
    'Video_broadcast_01_20160210.exe' (Win32): Loaded 'C:\Windows\SysWOW64\msacm32.dll'. Symbols loaded.
    'Video_broadcast_01_20160210.exe' (Win32): Loaded 'C:\Windows\SysWOW64\avicap32.dll'. Symbols loaded.
    'Video_broadcast_01_20160210.exe' (Win32): Loaded 'C:\Windows\SysWOW64\version.dll'. Symbols loaded.
    'Video_broadcast_01_20160210.exe' (Win32): Loaded 'C:\Windows\SysWOW64\msvcp110d.dll'. Symbols loaded.
    'Video_broadcast_01_20160210.exe' (Win32): Loaded 'C:\Windows\SysWOW64\msvcr110d.dll'. Symbols loaded.
    'Video_broadcast_01_20160210.exe' (Win32): Loaded 'C:\Windows\SysWOW64\imm32.dll'. Symbols loaded.
    'Video_broadcast_01_20160210.exe' (Win32): Loaded 'C:\Windows\SysWOW64\msctf.dll'. Symbols loaded.

    ***** VIDEOINPUT LIBRARY – 0.1995 – TFW07 *****

    'Video_broadcast_01_20160210.exe' (Win32): Loaded 'C:\Windows\SysWOW64\uxtheme.dll'. Symbols loaded.
    'Video_broadcast_01_20160210.exe' (Win32): Loaded 'C:\Windows\SysWOW64\apphelp.dll'. Symbols loaded.
    'Video_broadcast_01_20160210.exe' (Win32): Loaded 'C:\Windows\SysWOW64\SogouPY.ime'. Cannot find or open the PDB file.
    'Video_broadcast_01_20160210.exe' (Win32): Loaded 'C:\Windows\SysWOW64\msimg32.dll'. Symbols loaded.
    'Video_broadcast_01_20160210.exe' (Win32): Loaded 'C:\Windows\SysWOW64\ws2_32.dll'. Symbols loaded.
    'Video_broadcast_01_20160210.exe' (Win32): Loaded 'C:\Windows\SysWOW64\nsi.dll'. Symbols loaded.
    'Video_broadcast_01_20160210.exe' (Win32): Loaded 'C:\Windows\SysWOW64\oleacc.dll'. Symbols loaded.
    'Video_broadcast_01_20160210.exe' (Win32): Loaded 'C:\Windows\SysWOW64\ntmarta.dll'. Symbols loaded.
    'Video_broadcast_01_20160210.exe' (Win32): Loaded 'C:\Windows\SysWOW64\Wldap32.dll'. Symbols loaded.
    'Video_broadcast_01_20160210.exe' (Win32): Loaded 'C:\Windows\SysWOW64\dwmapi.dll'. Symbols loaded.
    'Video_broadcast_01_20160210.exe' (Win32): Loaded 'C:\Windows\SysWOW64\ole32.dll'. Symbols loaded.
    'Video_broadcast_01_20160210.exe' (Win32): Unloaded 'C:\Windows\SysWOW64\ole32.dll'
    'Video_broadcast_01_20160210.exe' (Win32): Loaded 'D:\Sogo\SogouInput\7.9.0.7343\Resource.dll'. Module was built without symbols.
    'Video_broadcast_01_20160210.exe' (Win32): Loaded 'D:\Sogo\SogouInput\Components\PicFace\1.0.0.1400\PicFace.dll'. Cannot find or open the PDB file.
    'Video_broadcast_01_20160210.exe' (Win32): Loaded 'C:\Windows\SysWOW64\psapi.dll'. Symbols loaded.
    'Video_broadcast_01_20160210.exe' (Win32): Loaded 'C:\Windows\SysWOW64\profapi.dll'. Symbols loaded.
    The thread 0x1504 has exited with code 0 (0x0).
    'Video_broadcast_01_20160210.exe' (Win32): Loaded 'D:\OpenCV\opencv\build\x86\vc11\bin\opencv_ffmpeg300.dll'. Module was built without symbols.
    The thread 0x18f8 has exited with code 0 (0x0).
    The thread 0x1bf4 has exited with code 0 (0x0).
    The thread 0x18e0 has exited with code 0 (0x0).
    The thread 0xd6c has exited with code 0 (0x0).
    The thread 0x1528 has exited with code 0 (0x0).
    The thread 0x784 has exited with code 0 (0x0).
    The thread 0x7c4 has exited with code 0 (0x0).
    The thread 0xb28 has exited with code 0 (0x0).
    The thread 0x3fc has exited with code 0 (0x0).
    The thread 0x7a8 has exited with code 0 (0x0).
    The thread 0x18cc has exited with code 0 (0x0).
    The thread 0x1998 has exited with code 0 (0x0).
    The program '[3984] Video_broadcast_01_20160210.exe' has exited with code 0 (0x0).
    博主我编译成功了,可是debug的时候出问题了,那个Microsoft的我也勾选了,依旧缺少文件

    #include "stdafx.h"
    #include "opencv2/opencv.hpp"
    using namespace cv;
    using namespace std;
    int _tmain(int argc, _TCHAR* argv[])
    {
        cvNamedWindow("Example2",CV_WINDOW_AUTOSIZE);
        CvCapture* capture=cvCreateFileCapture("D:\\2.flv");
        IplImage* frame;
        while(0)
        {
            frame=cvQueryFrame(capture);
            if(!frame) break;
            cvShowImage("Example2",frame);
            char c=cvWaitKey(33);
            if(c==27) break;
        }
        cvReleaseCapture(&capture);
        cvDestroyWindow("Example2");
        return 0;
    }

    这是代码,谢谢博主

    1. “exited with code 0”说明你的程序运行正常,没看到输出结果的话,问题可能出在输入视频的路径有误。

      “’C:\Windows\system\opencv_world300d.dll’. Cannot find or open the PDB file.”说明环境变量配置可能存在问题;

      “’D:\OpenCV\opencv\build\x86\vc11\bin\opencv_ffmpeg300.dll’. Module was built without symbols.”说明是在Debug模式下调用了Release版本的DLL文件,二者结合来看,也许是Debug模式的路径设置有些问题。

      个人经验,“Microsoft Symbol Servers”不到万不得已不要勾选,因为会增加很多不确定性。

      另外,你include了opencv2下的头文件,但代码调用的是C版本的变量和函数,建议改用C++版本(也就是不以cv开头的),性能会有显著提升。如果习惯使用老版本的接口,为了形式上的统一,也建议去掉“using namespace cv;”,把“#include “opencv2/opencv.hpp””改为“#include “opencv/cv.h””:)

    2. 博主,你好,我按照你说的配置完成后,编译出现下面的错误是怎么回事啊?

      错误      error C1083: 无法打开预编译头文件:“Debug\OpencvTest.pch”: No such file or directory    

  28. 1>—— 已启动生成: 项目: opencvceshi, 配置: Debug Win32 ——
    1>  opencvceshi.cpp
    1>d:\documents\visual studio 2010\projects\opencvceshi\opencvceshi\opencvceshi.cpp(2): fatal error C1083: 无法打开包括文件:“opencv2/core/core.hpp”: No such file or directory
    ========== 生成: 成功 0 个,失败 1 个,最新 0 个,跳过 0 个 ==========
    什么情况    博主   

      1. 'ces.exe': Loaded 'D:\Documents\Visual Studio 2010\Projects\ces\x64\Debug\ces.exe', Symbols loaded.
        'ces.exe': Loaded 'C:\Windows\System32\ntdll.dll', Cannot find or open the PDB file
        'ces.exe': Loaded 'C:\Windows\System32\kernel32.dll', Cannot find or open the PDB file
        'ces.exe': Loaded 'C:\Windows\System32\KernelBase.dll', Cannot find or open the PDB file
        'ces.exe': Loaded 'D:\Program Files\opencv\build\x64\vc10\bin\opencv_core2410d.dll', Cannot find or open the PDB file
        'ces.exe': Loaded 'C:\Windows\System32\msvcp100d.dll', Symbols loaded.
        'ces.exe': Loaded 'C:\Windows\System32\msvcr100d.dll', Symbols loaded.
        'ces.exe': Loaded 'D:\Program Files\opencv\build\x64\vc10\bin\opencv_highgui2410d.dll', Cannot find or open the PDB file
        'ces.exe': Loaded 'C:\Windows\System32\user32.dll', Cannot find or open the PDB file
        'ces.exe': Loaded 'C:\Windows\System32\gdi32.dll', Cannot find or open the PDB file
        'ces.exe': Loaded 'C:\Windows\System32\lpk.dll', Cannot find or open the PDB file
        'ces.exe': Loaded 'C:\Windows\System32\usp10.dll', Cannot find or open the PDB file
        'ces.exe': Loaded 'C:\Windows\System32\msvcrt.dll', Cannot find or open the PDB file
        'ces.exe': Loaded 'C:\Windows\System32\ole32.dll', Cannot find or open the PDB file
        'ces.exe': Loaded 'C:\Windows\System32\rpcrt4.dll', Cannot find or open the PDB file
        'ces.exe': Loaded 'C:\Windows\System32\oleaut32.dll', Cannot find or open the PDB file
        'ces.exe': Loaded 'C:\Windows\System32\advapi32.dll', Cannot find or open the PDB file
        'ces.exe': Loaded 'C:\Windows\System32\sechost.dll', Cannot find or open the PDB file
        'ces.exe': Loaded 'C:\Windows\winsxs\amd64_microsoft.windows.common-controls_6595b64144ccf1df_5.82.7601.18837_none_a4d981ff711297b6\comctl32.dll', Cannot find or open the PDB file
        'ces.exe': Loaded 'C:\Windows\System32\avifil32.dll', Cannot find or open the PDB file
        'ces.exe': Loaded 'C:\Windows\System32\winmm.dll', Cannot find or open the PDB file
        'ces.exe': Loaded 'C:\Windows\System32\msacm32.dll', Cannot find or open the PDB file
        'ces.exe': Loaded 'C:\Windows\System32\msvfw32.dll', Cannot find or open the PDB file
        'ces.exe': Loaded 'C:\Windows\System32\shell32.dll', Cannot find or open the PDB file
        'ces.exe': Loaded 'C:\Windows\System32\shlwapi.dll', Cannot find or open the PDB file
        'ces.exe': Loaded 'C:\Windows\System32\avicap32.dll', Cannot find or open the PDB file
        'ces.exe': Loaded 'C:\Windows\System32\version.dll', Cannot find or open the PDB file
        'ces.exe': Loaded 'D:\Program Files\opencv\build\x64\vc10\bin\opencv_imgproc2410d.dll', Cannot find or open the PDB file
        'ces.exe': Loaded 'C:\Windows\System32\imm32.dll', Cannot find or open the PDB file
        'ces.exe': Loaded 'C:\Windows\System32\msctf.dll', Cannot find or open the PDB file
        'ces.exe': Loaded 'C:\Windows\System32\nvinitx.dll', Cannot find or open the PDB file
        'ces.exe': Loaded 'C:\Program Files\NVIDIA Corporation\coprocmanager\detoured.dll', Cannot find or open the PDB file
        'ces.exe': Loaded 'C:\Program Files\NVIDIA Corporation\coprocmanager\nvd3d9wrapx.dll', Cannot find or open the PDB file
        'ces.exe': Loaded 'C:\Windows\System32\setupapi.dll', Cannot find or open the PDB file
        'ces.exe': Loaded 'C:\Windows\System32\cfgmgr32.dll', Cannot find or open the PDB file
        'ces.exe': Loaded 'C:\Windows\System32\devobj.dll', Cannot find or open the PDB file
        'ces.exe': Loaded 'C:\Program Files\NVIDIA Corporation\coprocmanager\nvdxgiwrapx.dll', Cannot find or open the PDB file
        The program '[7112] ces.exe: Native' has exited with code -1 (0xffffffff).

        博主    win7 系统出现了这个  

        1. vs2010中出现一长串“Cannot find or open the PDB file”的一种解决办法是,打开Tools->Options->Debugging->Symbols,勾选“Microsoft Symbol Servers”,vs会自动下载所需的PDB文件。

          程序exited with code -1的话,查看一下代码中有“return -1”的部分,问题也应该出在那里。

          尽量先检查return -1的地方,因为有些“Cannot find or open the PDB file”的warning是无关紧要的:)

  29. 'OpencvTest.exe': Loaded 'C:\Windows\SysWOW64\ntdll.dll', Symbols loaded (source information stripped).
    'OpencvTest.exe': Loaded 'C:\Windows\SysWOW64\kernel32.dll', Symbols loaded (source information stripped).
    'OpencvTest.exe': Loaded 'C:\Windows\SysWOW64\KernelBase.dll', Symbols loaded (source information stripped).
    The program '[66472] OpencvTest.exe: Native' has exited with code -1073741701 (0xc000007b).
    麻烦问一下这是什么情况哇

    1. 可能是由于dll文件配置不正确造成的,可以检查一下opencv相关的dll文件,尤其是debug与release版本的是否对应好了。

        1. 关键还是要看那个exit code和控制台的输出,根据exit code在msdn.microsoft.com搜索一下可能的错误原因。

          dll的路径要检查是x86还是x64,还有vc的版本(vc10代表vs2010,vc11代表vs2012等等)

  30. Error    1    error LNK1123: failure during conversion to COFF: file invalid or corrupt    E:\opencv\OpencvTest\OpencvTest\LINK    OpencvTest
    老说系统找不到指定文件。。。

  31. 我的是编译成功了,但是运行不了,找不到可执行文件,我上网百度了一些解决措施,其中有一个是说在清单工具里面把那个运用FAT32处理方法选择为“是”,可是我都没有找到这一项,请博主帮忙解决。

    1. “运用FAT32处理方法”是VS2008才有的属性,从2010开始就去掉了这项。因为目前计算机的文件系统基本只有NTFS格式,所以恐怕即使修改了支持FAT32也不会有很大帮助。所以错误的产生应该另有原因,方便的话,你把错误信息贴到这里吧:)

  32. 请问opencv3.0中虽然说了添加了一些算法模块,例如TLD跟踪算法,但在实际应用中,却没办法应用,这是什么原因

    1. 貌似在OpenCV 3.0前面的测试版本中给出了TLD_tracker模块,但听说计算效率非常低。目前我在OpenCV 3.0 Gold版本中没有发现任何与TLD有关的代码,大概是被暂时剔除了吧,,,

      其他新添加的模块我也没有过多关注,我想在效率问题解决之前应该不会在稳定版中露面了吧:)

  33. 1>—— 已启动生成: 项目: OpenCVtest, 配置: Debug Win32 ——
    1>生成启动时间为 2015/11/19 14:09:26。
    1>InitializeBuildStatus:
    1>  正在对“Debug\OpenCVtest.unsuccessfulbuild”执行 Touch 任务。
    1>ClCompile:
    1>  TRACKER : 
    1>C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\Platforms\Win32\Microsoft.Cpp.Win32.Targets(57,5): error MSB6006: “CL.exe”已退出,代码为 5。
    1>
    1>生成失败。
    1>
    1>已用时间 00:00:00.11
    ========== 生成: 成功 0 个,失败 1 个,最新 0 个,跳过 0 个 ==========

    F5运行后,显示:无法启动程序E:\..\Debug\OpenCVtest.exe  系统找不到指定文件

    尝试很多办法,都不行,还请楼主指点!!!

    1. 虽然我不太清楚这个错误产生的具体原因,但从Microsoft.Cpp.Win32.Targets文件第57行所在的段落看来,错误可能是由于预编译头产生的。而且,错误代码5一般代表ERROR_ACCESS_DENIED,所以我建议检查以下几个方面:

      在运行之前打开任务管理器检查一下项目程序是否已经运行,如果有就杀掉这个进程;

      检查一下项目文件夹的属性,是否有修改和读入的权限。尽量不要把项目建立在C盘,会比较容易出现文件访问和修改权限的问题。

  34. 为什么我的是,运行以后就弹出控制台界面,显示按任意键继续 没有图片,怎么弄啊????   求帮助

    1. 成功啦,谢谢,出现这种情况是我自己图片设置的有问题,谢谢啦,太开心啦!

    1. 你指的应该是KERNEL.dll吧。这个链接库是随着系统来的,并不属于OpenCV库。你用的什么系统?这种错误貌似不太常见,如果实在解决不了就把代码第17、40、41行注释掉吧

  35. d:\opencv\build\include\opencv2\core\mat.hpp(1965): warning C4819: 该文件包含不能在当前代码页(936)中表示的字符。请将该文件保存为 Unicode 格式以防止数据丢失
    1>d:\opencv\build\include\opencv2\core\persistence.hpp : warning C4819: 该文件包含不能在当前代码页(936)中表示的字符。请将该文件保存为 Unicode 格式以防止数据丢失
    1>d:\opencv\build\include\opencv2\core\mat.hpp(1965): warning C4819: 该文件包含不能在当前代码页(936)中表示的字符。请将该文件保存为 Unicode 格式以防止数据丢失
    1>d:\opencv\build\include\opencv2\core\utility.hpp : warning C4819: 该文件包含不能在当前代码页(936)中表示的字符。请将该文件保存为 Unicode 格式以防止数据丢失
    1>d:\opencv\build\include\opencv2\core\utility.hpp : warning C4819: 该文件包含不能在当前代码页(936)中表示的字符。请将该文件保存为 Unicode 格式以防止数据丢失
    1>LINK : fatal error LNK1104: 无法打开文件“opencv_calib3d300d.lib”

    我用的3.0.0版的,问题出在哪里呢

    1. 3.0版本预编译库只有opencv_ts300和opencv_world300两个,把许多之前版本的模块合并在了一个文件里,像opencv_calib3d300这样单独的模块是需要自己编译OpenCV库才会产生的。所以应该在项目属性的Linker->Input里只输入那两个库文件。我很快会更新一个配置OpenCV3的教程,希望到时候会对你有些帮助。

  36. 博主,我的运行以后就弹出控制台界面,显示按任意键继续 没有图片,怎么弄啊

  37. 楼主,我的为什么闪一下,出现控制台以后,就消失 ,看不见图片,哪里有问题啊。

          1. 你好,我之前也遇到了这样的问题,我按博主说的把return -1改为cin.get()后还是出错,我就把路径中的中文改为英文就显示啦

  38. INK : fatal error LNK1285: corrupt PDB file 'C:\Documents and Settings\Administrator\my documents\visual studio 2010\Projects\OpencvTest\Debug\OpencvTest.pdb'; delete and rebuild
    请问,这个错误如何解决呢

     

  39. 1>LINK : fatal error LNK1104: 无法打开文件“opencv_legacy2410d.libopencv_ml2410d.lib”

    能告诉我这是怎么回事吗?

    我按照上面的步骤对了好多遍都没有错。请问我还需要检查哪里?

    1. 应该是因为在Additional Dependencies里输入库名称时中间少了一个分号,本应是两个文件“opencv_legacy2410d.lib”和“opencv_ml2410d.lib”,但没有分隔符造成编译器认为这一长串是单独的一个文件。用一个英文分号把两部分分开就可以了。

  40. “test.exe”: 已加载“C:\Windows\winsxs\x86_microsoft.windows.common-controls_6595b64144ccf1df_5.82.7601.18837_none_ec86b8d6858ec0bc\comctl32.dll”,Cannot find or open the PDB file
    “test.exe”: 已加载“C:\Windows\System32\avicap32.dll”,Cannot find or open the PDB file
    “test.exe”: 已加载“C:\Windows\System32\version.dll”,Cannot find or open the PDB file
    “test.exe”: 已加载“D:\opencv\build\x86\vc10\bin\opencv_imgproc2411d.dll”,Cannot find or open the PDB file
    “test.exe”: 已加载“C:\Windows\System32\imm32.dll”,Cannot find or open the PDB file
    “test.exe”: 已加载“C:\Windows\System32\msctf.dll”,Cannot find or open the PDB file
    程序“[3220] test.exe: 本机”已退出,返回值为 -1 (0xffffffff)。

    请问博主,运行之后出现这个问题可能是什么情况?

      1.   博主,我是win7   出现

         

        “t.exe”: 已加载“E:\VS2010_wrokspace\t\Debug\t.exe”,已加载符号。
        “t.exe”: 已加载“C:\Windows\System32\ntdll.dll”,已加载符号(去除源信息)。
        “t.exe”: 已加载“C:\Windows\System32\kernel32.dll”,已加载符号(去除源信息)。
        “t.exe”: 已加载“C:\Windows\System32\KernelBase.dll”,已加载符号(去除源信息)。
        “t.exe”: 已加载“E:\Program Files\opencv\build\x86\vc10\bin\opencv_core2410.dll”,Cannot find or open the PDB file
        “t.exe”: 已加载“C:\Windows\System32\msvcp100.dll”,已加载符号(去除源信息)。
        “t.exe”: 已加载“C:\Windows\System32\msvcr100.dll”,已加载符号。
        “t.exe”: 已加载“E:\Program Files\opencv\build\x86\vc10\bin\opencv_highgui2410.dll”,Cannot find or open the PDB file
        “t.exe”: 已加载“C:\Windows\System32\user32.dll”,已加载符号(去除源信息)。
        “t.exe”: 已加载“C:\Windows\System32\gdi32.dll”,已加载符号(去除源信息)。
        “t.exe”: 已加载“C:\Windows\System32\lpk.dll”,已加载符号(去除源信息)。
        “t.exe”: 已加载“C:\Windows\System32\usp10.dll”,已加载符号(去除源信息)。
        “t.exe”: 已加载“C:\Windows\System32\msvcrt.dll”,已加载符号(去除源信息)。
        “t.exe”: 已加载“C:\Windows\System32\ole32.dll”,已加载符号。
        “t.exe”: 已加载“C:\Windows\System32\rpcrt4.dll”,已加载符号(去除源信息)。
        “t.exe”: 已加载“C:\Windows\System32\oleaut32.dll”,已加载符号(去除源信息)。
        “t.exe”: 已加载“C:\Windows\System32\advapi32.dll”,已加载符号(去除源信息)。
        “t.exe”: 已加载“C:\Windows\System32\sechost.dll”,已加载符号(去除源信息)。
        “t.exe”: 已加载“C:\Windows\winsxs\x86_microsoft.windows.common-controls_6595b64144ccf1df_5.82.7601.18837_none_ec86b8d6858ec0bc\comctl32.dll”,已加载符号(去除源信息)。
        “t.exe”: 已加载“C:\Windows\System32\avifil32.dll”,已加载符号(去除源信息)。
        “t.exe”: 已加载“C:\Windows\System32\winmm.dll”,已加载符号(去除源信息)。
        “t.exe”: 已加载“C:\Windows\System32\msacm32.dll”,已加载符号(去除源信息)。
        “t.exe”: 已加载“C:\Windows\System32\msvfw32.dll”,已加载符号(去除源信息)。
        “t.exe”: 已加载“C:\Windows\System32\shell32.dll”,已加载符号(去除源信息)。
        “t.exe”: 已加载“C:\Windows\System32\shlwapi.dll”,已加载符号(去除源信息)。
        “t.exe”: 已加载“C:\Windows\System32\avicap32.dll”,已加载符号(去除源信息)。
        “t.exe”: 已加载“C:\Windows\System32\version.dll”,已加载符号(去除源信息)。
        “t.exe”: 已加载“E:\Program Files\opencv\build\x86\vc10\bin\opencv_imgproc2410.dll”,Cannot find or open the PDB file
        “t.exe”: 已加载“C:\Windows\System32\msvcp100d.dll”,已加载符号。
        “t.exe”: 已加载“C:\Windows\System32\msvcr100d.dll”,已加载符号。
        “t.exe”: 已加载“C:\Windows\System32\imm32.dll”,已加载符号(去除源信息)。
        “t.exe”: 已加载“C:\Windows\System32\msctf.dll”,已加载符号(去除源信息)。
        程序“[11956] t.exe: 本机”已退出,返回值为 -1 (0xffffffff)。
         

    1. 试一下在vs左边的目录里右击包含main函数的cpp文件,选“属性”。属性窗口的左边展开“C/C++” -> “所有选项”(应该是叫这个,反正是倒数第二个),右边的列表里找“预编译头”,删掉相应的值(这个值应该原本是带“/Yu”的)。

      1. 感谢博主,问题解决了,测试成功!希望留个联系方式,跟博主好好交流、学习

  41. 执行程序时,出现错,error C1010: 在查找预编译头时遇到意外的文件结尾。是否忘记了向源中添加“#include "StdAfx.h"? 

  42. 按这说明配了将近10遍了还是不成功,一直报1>LINK : fatal error LNK1104: 无法打开文件“opencv_calib3d2410d.lib”,博主帮帮忙分析下原因吧!

    1. 遇到fatal error LNK1104,首先要检查lib文件的路径和名称是否正确,如果下载的库版本不是2.4.10,就要相应修改lib文件的名称。

      1. 把这些文件拷贝到项目目录下成功运行了,没发现之前目录哪儿设置有问题啊,就是运行不起来。

        1. 那就应该是之前项目属性的链接库路径有问题了,请再仔细检查一下。注意一下vs的版本,debug和release的区别。

  43. LINK : fatal error LNK1104: 无法打开文件“opencv_calib3d2410d.lib”

    按照上述步骤,何为出现这个?很郁闷。

    1. 检查一下链接库的路径是否正确,Debug和Release都要设置。还要注意“opencv_calib3d****d.lib”所表示的版本号与下载的OpenCV库版本是不是一致。

  44. 虽然楼主的过程已经很详尽了,但还是遇到了很多的问题,运行结果出来的一刻老开心了

  45. 1>—— 已启动生成: 项目: test1, 配置: Debug Win32 ——
    1>生成启动时间为 2015/5/15 17:07:00。
    1>InitializeBuildStatus:
    1>  正在对“Debug\test1.unsuccessfulbuild”执行 Touch 任务。
    1>ClCompile:
    1>  所有输出均为最新。
    1>  test1.cpp
    1>f:\vs2010\test1\test1\test1.cpp(4): warning C4627: “#include <opencv2/core/core.hpp>”: 在查找预编译头使用时跳过
    1>          将指令添加到“StdAfx.h”或重新生成预编译头
    1>f:\vs2010\test1\test1\test1.cpp(5): warning C4627: “#include <opencv2/imgproc/imgproc.hpp>”: 在查找预编译头使用时跳过
    1>          将指令添加到“StdAfx.h”或重新生成预编译头
    1>f:\vs2010\test1\test1\test1.cpp(6): warning C4627: “#include <opencv2/highgui/highgui.hpp>”: 在查找预编译头使用时跳过
    1>          将指令添加到“StdAfx.h”或重新生成预编译头
    1>f:\vs2010\test1\test1\test1.cpp(7): warning C4627: “#include <iostream>”: 在查找预编译头使用时跳过
    1>          将指令添加到“StdAfx.h”或重新生成预编译头
    1>f:\vs2010\test1\test1\test1.cpp(50): fatal error C1010: 在查找预编译头时遇到意外的文件结尾。是否忘记了向源中添加“#include "StdAfx.h"”?
    1>
    1>生成失败。
    1>
    1>已用时间 00:00:00.20
    ========== 生成: 成功 0 个,失败 1 个,最新 0 个,跳过 0 个 ==========

    这个问题是为什么。

    1. 错误信息里已经提示了“是否忘记了向源中添加#include “StdAfx.h””,所以在代码最开头加一行

      #include “stdafx.h”

      就可以了。在新建项目时勾选“Empty Project”可以避免这个问题

    1. 可以用“File -> Export Template…”把项目导出成模板,然后把生成的.zip模板文件放在C:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\IDE\ItemTemplates中。重启vs2010,新建项目时就能看到这个新模板了

发表评论

电子邮件地址不会被公开。 必填项已用*标注