坑爹的OpenCV配置笔记

来源:互联网 发布:淘宝投诉编号哪里查 编辑:程序博客网 时间:2024/05/07 04:02
我承认我木有使用自己编译的办法。。因为那样做太难受了

记录下正文。
我是在64位win7 + vs2013下 安装 opencv 3.0alpha 版本
(截至2014 9 25, 这是最高的配置和最新的版本了)

首先下载opencv那个exe,在官网下载。

这里有两个选择,一个是使用官网预编译好的库文件(dll,lib那些乱七八糟的东西)
一个是自己用cmake编译,然后再倒入dll,lib那些乱七八糟的东西。

我很懒,使用的是第一个。。然而第一种方法总是出现奇怪的问题。

事实上,opencv帮我们编译的vs库是没有问题的,基本上问题在于自己不了解整个流程每一步是干什么的,有时候错了一个地方,也没办法fix。

opencv想要在vs中使用的话,需要两个东西包含到工程:
1)一堆头文件,各种.h文件,在c++编程的时候,include “xxxx.h”,这个就是头文件
在解压后一般放在include子目录下。

解压后的opencv里面一般有两个文件夹,一个叫build,一个叫source。source是自行编译的时候所要使用的,里面有源码,甚至还有一些例子代码。不过,对于懒鬼而且碰巧使用windows+vs的人,就不用source了。删除也没关系。 build 里面就是我们所需要的东西。

2)除了头文件s。我们还需要库文件,也就是lib结尾的那种文件。这些个库文件在每个平台,甚至每个编译器下面出来的结果都不一样。所以,假如我们使用的平台不是windows+vs2013(2012,2010),就需要自行编译。那种方法,后面再提。


上图是build目录下,进入x86(32位编译器),再进入vc12(vc12对应visual studio 2013,实际上vc12才是vs2013的编译器版本)。事实上,对于32位的windows系统,确实只能使用32位编译器。但是对于64位系统,32和64位编译器都是可行的。

为了让上述两个东西能够顺利导入工程,我们第一步要配置环境变量:
1. 系统变量 PATH,要添加上图的bin目录。在我这里,也就是 D:\opencv\build\x86\vc12\bin  。正如上面所提到,64位系统的话,可以同时添加D:\opencv\build\x64\vc12\bin 。 这个bin里面全是dll,也就是动态链接库,可以姑且当做是opencv那些函数的实现。毕竟一个头文件是不可能使用的。
小技巧:为了方便以后把opencv整个文件夹移动,可以在系统变量那里添加一个OPENCV变量,然后值是D:\opencv\build 。后面都使用这个变量的话,就算移动整个opencv文件夹,也只需要改这个OPENCV系统变量的值就可以了。当然,这个小技巧不是必须的。
再说个废话,,其实这个PATH的添加也不是必要的。在后面的vs属性配置里,也可以再链接目录那一栏添加这个bin目录。这里添加到PATH,vs属性配置也会默认添加PATH变量从而成功添加bin目录。

2. 然后在vs中要配置一些属性。

打开视图-其他菜单-属性管理器
得到如下的图像的右边那一栏。

属性管理器里面有两个win32的属性清单。是因为debug和release都使用win32编译器的缘故。假如使用x64编译器,则需要打开配置管理器(在debug右边下拉菜单有),然后打开活动解决方案平台,新建x64,就会在属性管理器出现x64的debug和release


属性配置正式开始(我们就使用32位好了,毕竟不是很大的需求,以后需要再配置64的)
【1】
在属性管理器里,双击debug|win32,然后打开  vc++目录 
在包含目录添加include文件夹的路径,也就是$D:\opencv\build\include,也可以使用刚刚提到的小技巧,那样就变成了 $(OPENCV)\include
在库目录添加$D:\opencv\build\x86\vc12]\lib 。很容易理解,毕竟library就是库。。同样,小技巧 $(OPENCV)\x86\vc12\lib
在链接器-输入-附加依赖项,添加以下所有东西:
注:这是2.4.9的。。。每个opencv版本都不一样
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
(事实上,这些东东就是lib文件夹下面的所有文件名,把这些lib文件添加依赖后,就相当于添加到工程。)
(又事实上,在opencv3.0alpha版本,就只有两个文件,一个叫opencv_ts300d.lib, 一个叫opencv_world300d.lib,故而只需要添加这两个到附加依赖项)
(再事实上,每个版本不一样,包括后面的数字。故应该自己找到lib文件夹,然后把里面所有文件名都添加到附加依赖项就可以了)
【2】
在属性管理器还有一个release|win32。按照上述方法做一遍,就可以了。唯一区别是,那些lib文件的名字没有了最后那个字母d。
opencv_ml249.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_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
【3】
配置大功告成!为了庆祝我们配置完成,重启电脑吧!(有些系统变量需要重启才生效,可以顺便喝喝水)

然后用一个控制台程序测试下

代码如下:

#include <opencv2/core/core.hpp> 
#include <opencv2/highgui/highgui.hpp> 
#include <iostream>  

using namespace std;
using namespace cv;


int main(int argc, char** argv)
{

     Mat img = imread("D:\\VS Project\\Test\\Debug\\1.jpg");

     if (img.empty())
     {
          std::cout << "Shit!" << endl;
          system("pause");
          return -1;
     }


     imshow("image", img);

     waitKey();

     return 0;
}

注意!!!!imread里面的那个路径,\一定要两个,否则一直都读不出来图像。因为在string里面,\有别的含义和用法!!
路径对了的话,基本上就没有太大问题了~

如果出现什么程序无法启动啊~什么丢失xxxxxx.dll啊~之类的,就是个别案例了。就网上搜吧。


//*****************************************************************************
过了愉快的一个月。。。我才终于知道。。原来那些什么环境变量都是不是必须的。。配置opencv工程,只需要以下几步:

1 下载并解压opencv
2 打开vs
3 打开属性管理器,双击工程名那里,找到 配置属性 --- vc++目录
4 把适当的bin文件夹路径添加到   “可执行文件目录”; 把适当的include路径添加到  “包含目录”;把适当的lib路径添加到  “库文件目录”;(这里的合适是指根据vs版本和编译器版本)
5 大功告成
6 当然,保守起见,配置一下环境变量也不是什么大事。。



1 1
原创粉丝点击