前言说明:
1. VC6.0 支持不了OpenCV2.3.1
2. 参考: http://www.opencv.org.cn/index.php/VC_2008_Express%E4%B8%8B%E5%AE%89%E8%A3%85OpenCV2.3.1
一. 安装OpenCV2.3.1 (不需要编译, 直接使用)
1.1 下载 OpenCV-2.3.1-win-superpack.exe和解压
http://www.opencv.org.cn/download/OpenCV-2.3.1-win-superpack.exe
(这是一个exe程序, 运行后按提示解压即可, 解压完也就是安装完了)
例如选择 C:\OpenCV231\目录
图1
解压界面:
图2
1.2 解压后的目录结构
解压后C:\OpenCV231\opencv的目录结构
图3
二. 创建VC控制台程序
2.1 创建VC控制台程序(其他类型的工程也行)
2.2 添加lib目录和include目录(你懂的)
C:\OpenCV231\opencv\build\x86\vc9\lib和C:\OpenCV231\opencv\build\include
图4
A. 我这里使用了绝对路径, 也可以把Include目录和lib目录拷贝到你的工程低下, 使用相对路径也可以的.
B. 我这里使用的运行时需要dll的.
2.3 输入如下代码:
#include "stdafx.h" #include <opencv2/opencv.hpp> using namespace std; using namespace cv; int _tmain(int argc, char* argv[]) { const char* imagename = "lena.jpg"; //从文件中读入图像 Mat img = imread(imagename); //如果读入图像失败 if(img.empty()) { fprintf(stderr, "Can not load image %s\n", imagename); return -1; } //显示图像 imshow("image", img); //此函数等待按键,按键盘任意键就返回 waitKey(); return 0; }
2.4 编译
编译通过, 连接失败. 所以要添加对应的lib(Release的对应Release的, Debug对应Debug的)
我这里的是这些
opencv_calib3d231.lib opencv_contrib231.lib opencv_core231.lib opencv_features2d231.lib opencv_flann231.lib opencv_gpu231.lib opencv_highgui231.lib opencv_imgproc231.lib opencv_legacy231.lib opencv_ml231.lib opencv_objdetect231.lib opencv_ts231.lib opencv_video231.lib
图5
再编译就通过了, 拷贝对应的dll到你的exe目录下, 或者把dll的目录添加到环境变量下, 运行即可.
Dll目录是C:\OpenCV231\opencv\build\x86\vc9\bin
三. 不使用dll
使用静态库的话, 需要指定C:\OpenCV231\opencv\build\x86\vc9\staticlib目录
并添加
opencv_calib3d231.lib opencv_contrib231.lib opencv_core231.lib opencv_features2d231.lib opencv_flann231.lib opencv_gpu231.lib opencv_highgui231.lib opencv_imgproc231.lib opencv_legacy231.lib opencv_ml231.lib opencv_objdetect231.lib opencv_ts231.lib opencv_video231.lib zlib.lib libjpeg.lib libjasper.lib libpng.lib libtiff.lib opencv_video.lib vfw32.lib comctl32.lib
红色的lib zlib.lib libjpeg.lib libjasper.lib libpng.lib libtiff.lib默认是没有的, 需要自己编译;
vfw32.lib和comctl32.lib是VC本身有的;
没有comctl32.lib会报这个错误error LNK2001: unresolved external symbol __imp__CreateToolbarEx@52
四. 编译OpenCV2.3.1
zlib.lib libjpeg.lib libjasper.lib libpng.lib libtiff.lib只能自己编译, 所以你还是要自己编译一遍.
4.1 下载cmake-2.8.10.2-win32-x86.exe
http://www.cmake.org/cmake/resources/software.html
参考 http://www.opencv.org.cn/index.php/VC_2008_Express%E4%B8%8B%E5%AE%89%E8%A3%85OpenCV2.3.1 中的CMake的配置生成VC2008的工程.
4.2 编译OpenCV的VC2008工程
CMake生成的VC2008工程生成的是dll, 所以需要手动修改各个工程为静态库工程, 然后编译.
看下图: 有这么多个工程. 批量选中工程, 设置为静态库工程编译
图6
图7
4.3 lib的使用
编译完后, 找到编译完成的lib, 使用即可.
小结:
如果直接使用dll的版本, 是很简单的, 解压后就可以使用了, 但是如果使用静态库的话, 那解压后, 有些静态库是需要自己编译的. 并且由于lib的那种菱形使用关系的原因, 使得有些函数不知道在哪个lib中, 例如(zlib.lib libjpeg.lib libjasper.lib libpng.lib libtiff.lib vfw32.lib comctl32.lib)找这几个lib的连接错误用了很多时间.
编译成静态库使用, 把lib和include跟着工程走, 以后就不用换一个环境就编译一次OpenCV了. 当然用dll也可以的, 适合就好.
http://www.opencv.org.cn/index.php/VC_2008_Express%E4%B8%8B%E5%AE%89%E8%A3%85OpenCV2.3.1这个网址的说明已经很清楚了, 但是它的过程应该是默认你是使用dll的方式. 而我这里增加了使用lib的方式.