一般用编译好的openCV库直接放在自己的电脑上,可能会出现一些问题,比如系统不兼容,而且虽然win7是64位系统,但是在VS运行上可能只用了32位,也会造成已经编译好的openCV库的调用问题(使用已经编译好的openCV库方法请参考 点击打开链接)。
为了保证openCV能够顺利调用,最好用CMake针对自己的电脑系统进行openCV编译。过程如下:
1.openCV的安装及编译
- 将 OpenCV-2.3.1-win-superpack.exe 解压并放到某个目录下(无需运行setup.exe,解压则可)。
- 用CMake导出VC++项目文件
- 运行cmake-gui(在cmake安装路径中的bin文件夹中)
- 设置"where is the source code"路径为上述的OpenCV解压的文件夹路径
- 设置"where to build the binaries"路径为OpenCV安装的路径,假定为 D:\Program Files\OpenCV2.3.1
- 然后点 configure,在弹出的对话框内选择 Visual Studio 9 2008。
- configure done,再次点击configure
- 最后点击generate
- 编译 OpenCV Debug和Release版本库
- 完成上一步骤后,将在 D:\Program Files\OpenCV2.3.1 目录下生成OpenCV.sln的VC Solution File,请用VC++ 2008 Express打开OpenCV.sln
- 在Debug下,选择Solution Explorer (视图→解决方案资源管理器)里的 Solution OpenCV(解决方案“OpenCV”),点右键,运行"Rebuild Solution"(重新生成解决方案);如编译无错误,再选择INSTALL项目,运行"Build"。
- 在Release下,选择Solution Explorer里的 Solution OpenCV,点右键,运行"Rebuild Solution";如编译无错误,再选择INSTALL项目,运行"Build"。
- 全部运行完毕后,针对你的系统的OpenCV库就生成了。
2. 在VS上设置openCV的配置:
打开VS,选择菜单“工具”->“选项”->“项目和解决方案”->“VC++目录”
- 配置exe路径:
- 选择“可执行文件”,添加路径 D:\Program Files\OpenCV2.3.1\install\bin
- 配置include路径:
- 告诉VC去什么地方寻找OpenCV的头文件
- 选择“包含文件”,添加路径 D:\Program Files\OpenCV2.3.1\install\include
- 配置lib路径:
- 告诉VC去什么地方寻找OpenCV的库文件
- 选择“库文件”,添加路径 D:\Program Files\OpenCV2.3.1\install\lib
3. 设置环境变量:
- 刚才设置的是动态库,因此还需要将OpenCV的dll文件所在的目录加入Path环境变量。dll目录为:D:\Program Files\OpenCV2.3.1\install\bin
- 加入后可能需要注销当前Windows用户(或重启)后重新登陆才生效。
4. 新建工程,调用openCV函数
- 在项目→属性→配置属性→链接器→输入→附加依赖项中添加:opencv_calib3d231d.lib opencv_contrib231d.lib opencv_core231d.lib opencv_features2d231d.lib opencv_flann231d.lib opencv_gpu231d.lib opencv_highgui231d.lib opencv_imgproc231d.lib opencv_legacy231d.lib opencv_ml231d.lib opencv_objdetect231d.lib opencv_ts231d.lib opencv_video231d.lib (说明:231对应的就是版本号,d表示debug模式下,如果你的工程用的是release模式,可以将d这个去掉,也可以将两种都添加上去,如:opencv_calib3d231d.lib opencv_calib3d231.lib。因为我用的是debug模式,在具体应用中,包含了opencv_calib3d231.lib会造成编译不成功,索性就只添加d相关的库。另外,上面包含的库文件数可根据实际需求进行删减)
- 在主程序中尝试代码,输入以下代码,调试运行成功(正常显示图片)
<span style="font-size:14px;">#include "stdafx.h"
#include <opencv.hpp>
using namespace std;
using namespace cv;
int main(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;
}
</span>