欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

[前奏篇] Win7+opencv2.4.9+Visual Studio2010之环境配置

程序员文章站 2022-04-11 12:59:23
...

前言

opencv2.4.9+Visual Studio2010来说网上有很多学习资料,方便快速入手,在安装时主要参照了浅墨_毛星云opencv系列教程入门安装,写得非常详细,也就不再累赘了,在此主要做一些补充及自己安装过程中所遇问题的解决,配置过程并不复杂。

1. 下载&安装 opencv SDK & Visual Studio2010

opencv官网:https://opencv.org/,由于在下载时经常下载到中途就卡住,速度也比较慢,在此提供opencv2.4.9百度网盘下载地址:https://pan.baidu.com/s/1jHWev7g 密码:4zk4

关于其他版本OpenCV-V2.4.11、OpenCV-V3.0.0、OpenCV-V3.1.0、OpenCV-V3.2.0、OpenCV-V3.3.0在下面这个博客中有给出:OpenCV 下载驿站(百度云盘下载,同步更新) http://blog.csdn.net/yanzi1225627/article/details/47668021

Visual Studio2010的网盘地址:https://pan.baidu.com/s/1kUNURFx
密码:mp4w

2. 配置环境变量

主要是将opencv下bin文件夹添加到PATH环境变量,以便在各目录下调用opencv中bin目录下的可执行程序都能找到,环境变量比喻性来说有点类似于操作系统中的“全局变量”,当调用某一可执行程序时,操作系统会在当前目录及环境变量所包含目录下寻找该可执行程序,如果都没有会提示可执行程序找不到,就得带上全路径执行了,扯远了…

以安装目录在XXX为例:
对于32位系统,就添加:
”XXX\opencv\build\x86\vc10\bin”(和之前的就有有的环境变量用英文的分号“;”进行分隔)

而对于64位系统,可以两个都添加上:
”XXX\opencv\build\x86\vc10\bin”
和”XXX\opencv\build\x64\vc10\bin”,
这样,到时候才可以在编译器Win32和X64中来回切换都吃得开,游刃有余~

注:变量值实际为bin文件夹的路径;D表示OpenCV安装于D盘;X64表示运行系统环境位64位系统,若安装于32位系统,应为X86;vc10表示编译环境为Microsoft Visual Studio 2010;变量添加完成后最好注销系统,才会生效。

3. 包含(include)目录、工程库(lib)目录、链接库的配置

这些在浅墨的博客中已经不能再详细了,主要是在“属性管理器”工作区中,点击项目->Debug|Win32->Microsoft.Cpp.Win32.userDirectories(反键属性,或者双击)即可打开属性页面。在“属性管理器”设置将来会被继承,具体的设置请参照浅墨博客。

重点再说下关于链接库的配置:
【通用属性】 ->【链接器】->【输入】->【附加的依赖项】
对于【OpenCV2.4.9】,添加如下249版本的lib(这样的lib顺序是:19个带d的debug版的lib写在前面,19个不带d的release版的lib写在后面):

opencv_ml249d.lib
opencv_calib3d249d.lib
opencv_contrib249d.lib
opencv_core249d.lib
opencv_features2d249d.lib
opencv_flann249d.lib
opencv_gpu249d.lib
opencv_highgui249d.lib
opencv_imgproc249d.lib
opencv_legacy249d.lib
opencv_objdetect249d.lib
opencv_ts249d.lib
opencv_video249d.lib
opencv_nonfree249d.lib
opencv_ocl249d.lib
opencv_photo249d.lib
opencv_stitching249d.lib
opencv_superres249d.lib
opencv_videostab249d.lib

opencv_objdetect249.lib
opencv_ts249.lib
opencv_video249.lib
opencv_nonfree249.lib
opencv_ocl249.lib
opencv_photo249.lib
opencv_stitching249.lib
opencv_superres249.lib
opencv_videostab249.lib
opencv_calib3d249.lib
opencv_contrib249.lib
opencv_core249.lib
opencv_features2d249.lib
opencv_flann249.lib
opencv_gpu249.lib
opencv_highgui249.lib
opencv_imgproc249.lib
opencv_legacy249.lib
opencv_ml249.lib
由于将所有带d的lib放在前面,不带d的lib放在后面,debug版本会优先,在编译时很可能出现debug版本是能运行,但是release版本不能运行的情况。遇到这种情况当需要运行release版本时,只需要在本工程中将不带d的再添加一遍就行。
情景还原及解决(当前debug OK,release不能运行):
[前奏篇] Win7+opencv2.4.9+Visual Studio2010之环境配置
在属性管理器中的附加依赖项为带d的lib在前,不带d的lib在后,在前的会优先,debug OK,release运行报某某地址有未经处理的异常(因为字符串读取问题引起的诸如图片载入不了,报指针越界,内存错误等等)

解决:修改当前项目的附加依赖项,在【项目】–>【工程名属性】,我的工程名叫test_opencv,就点击【项目】下test_opencv属性
[前奏篇] Win7+opencv2.4.9+Visual Studio2010之环境配置
在【通用属性】 ->【链接器】->【输入】->【附加的依赖项】可以看到继承的值就是前面在属性管理器中设置的内容,带d的lib在前,不带d的lib在后,在此只需要将不带d的lib复制粘贴到上面即可,如图:
[前奏篇] Win7+opencv2.4.9+Visual Studio2010之环境配置

这样切换到release下既可以运行通过了

4. 最终测试

在Windows文件夹下加入OpenCV动态链接库这一步只要前面PATH环境变量设置没有问题,电脑也重启后是不需要的,重启是为了使环境变量设置生效,因为环境变量会在开机过程中被读取。

测试代码:

`
#include <opencv2/opencv.hpp>  
using namespace cv;  

int main()  
{  
    const char* imagename = "img2.jpg";
    Mat img= imread(imagename);
    if(img.empty())
    {
        fprintf(stderr, "Can not load image %s\n", imagename);
        return -1;
    }
    namedWindow("demo");  
    imshow("demo",img);  
    waitKey(6000);  
    return 0;
} `

注意:示例程序中img2.jpg为图片名,需放在*.cpp目录,一般会有两层项目名的文件夹。
[前奏篇] Win7+opencv2.4.9+Visual Studio2010之环境配置

Misc:遇到的问题

1.在debug时遇到 Cannot find or open the PDB file
如下:
“TestIfly.exe”: 已加载“E:\workspace\vc\TestIfly\Debug\TestIfly.exe”,已加载符号。
“TestIfly.exe”: 已加载“C:\Windows\SysWOW64\ntdll.dll”,Cannot find or open the PDB file
“TestIfly.exe”: 已加载“C:\Windows\SysWOW64\kernel32.dll”,Cannot find or open the PDB file
“TestIfly.exe”: 已加载“C:\Windows\SysWOW64\KernelBase.dll”,Cannot find or open the PDB file
“TestIfly.exe”: 已加载“C:\InterReco 4.1\bin\isr_api.dll”,Cannot find or open the PDB file
“TestIfly.exe”: 已加载“C:\Windows\SysWOW64\user32.dll”,Cannot find or open the PDB file
“TestIfly.exe”: 已加载“C:\Windows\SysWOW64\gdi32.dll”,Cannot find or open the PDB file
“TestIfly.exe”: 已加载“C:\Windows\SysWOW64\lpk.dll”,Cannot find or open the PDB file
“TestIfly.exe”: 已加载“C:\Windows\SysWOW64\usp10.dll”,Cannot find or open the PDB file
“TestIfly.exe”: 已加载“C:\Windows\SysWOW64\msvcrt.dll”,Cannot find or open the PDB file
[前奏篇] Win7+opencv2.4.9+Visual Studio2010之环境配置

解决:
参照:http://topic.csdn.net/u/20101108/14/49f2a594-8da2-4f5e-a01d-dd08b29f961b.html
总结如下:
原因是程序输出的地方是系统而不是vs2010。
Ctrl + F5运行就可以了
或者在cmd命令行下执行程序。
或者
把”Microsoft Symbol Servers”勾上(Tools -> Options -> Debugging -> Symbols). 这种使得编译很慢,可以先勾选上编译运行通过后,再去掉速度就没那么慢了。