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

avatar
61 Comment threads
99 Thread replies
0 Followers
 
Most reacted comment
Hottest comment thread
58 Comment authors
N0John Hany羊羊羊张思睿赵小萌 Recent comment authors
  Subscribe  
最新 最旧
订阅评论
张思睿
张思睿

请接受我的膝盖,太感谢您啦

赵小萌
赵小萌

博主,你好!我按照你的方法配置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>—— 已启动生成: 项目: 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 个 ==========
 

 

请问这个怎么弄?

天蝎
天蝎

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

“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)。
 

N0
N0

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

Tricazyz
Tricazyz

楼主: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配置。

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

请问楼主这是那么问题?

怎么解决?

谢谢!

 

Amber
Amber

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

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”

Amber
Amber

对了,我的是opencv3.1,为什么那个文件不能打开呢

悲苦的斌
悲苦的斌

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 个 ==========

悲苦的斌
悲苦的斌

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

姣姣
姣姣

#include "stdafx.h"

#include <highgui.h>

在代码最前面再写以上两行代码

姣姣
姣姣

程序最前面应该再写两行代码,如下:

#include "stdafx.h"

#include <highgui.h>

黄百川
黄百川

“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)。
 

黄雯菁
黄雯菁

请教一下大神,这是为什么呢?应该如何解决?谢谢啦 1>—— Rebuild All started: Project: OpencvTest, Configuration… 阅读更多 »

dustsky
dustsky

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

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

zyy
zyy

请问,我输入你图片中的代码,为什么#include这些标识错误?

李冬冬
李冬冬

请问,配置完了以后要看什么书?关于opencv2.4.10的?

李冬冬
李冬冬

你好,请问这个opencv2.4.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 个 ==========

 

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

蔡斌
蔡斌

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”: 不可识别的字符转义序列

 

 

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

不来也不去
不来也不去

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

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

 

vf
vf

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

 

万政
万政

你好,我照你的配置了一下再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