Visual Studio下OpenCV最完美的环境配置方法
2016-01-13 00:22
591 查看
本文方法主要适用于经典的OpenCV2.4.x的所有版本,3.x不在范围内。本文的配置方法可以容忍vs的所有版本,以及32位和64位的配置冲突问题,完美解决OpenCV所有配置相关问题,一次完成配置,轻松编写所有程序,并且能使各种vs版本配置的环境不冲突的方法。
如果你已经配置了opencv,有问题或者没问题,避免方法冲突可以清掉现有配置,以现在这种方法来实现最佳配置。
b.将build/x64下的vc10、vc11、vc12(如果有vc9、vc13等,一样修改,后面加0即可),修改为vc100、vc110、vc120,如图
c.将build下的x86修改为win32
a.选择配置管理器-新建解决方案平台-选择x64,确定即可,如图:
b.选择视图-属性管理器
c.填入头文件和库文件路径
这里库的路径是如下,该库路径是全部通用:
H:\opencv2.4.10\build/$(Platform)/vc$(PlatformToolsetVersion)/staticlib
d.添加宏定义:_CRT_SECURE_NO_WARNINGS
a.打开cv.h
b.在cv.h中添加一句:#include <opencv/cv_import_static_lib.h>
c.打开core.hpp
d.在core.hpp中添加一句:#include <opencv/cv_import_static_lib.h>
e.core.hpp上点右键,打开core.hpp所在目录,进入到opencv头文件目录下,然后转到:H:\opencv2.4.10\build\include\opencv
f.在目录中新建文本文件.txt,并将如下内容粘贴并保存
g.将新建文本文件.txt改名为cv_import_static_lib.h
h.回到工程中,修改工程的所有配置属性为静态mfc:
i.点击执行或者按下Ctrl+F5
正常情况下,应该会出现这个窗口,算正式完成配置
b.写任何你想要的opencv代码即可直接运行。
b.设置工程属性为静态mfc
c.即可执行
基于5和6看,你会发现,使用的时候是相当方便的,不会再受dll所干扰而浪费时间,摸不着头脑。
并且,这种模式,你能够在win32、x64、debug、release下完全跑起来,而不像之前,会出现很多异常。
另外,这模式是基于静态库的,也就是发布软件的时候非常方便,不需要携带任何opencv的dll文件。非常有利于做各种事情。
如果你在vs2010下配置的,那么以这个方式,在2013下也完全能够零改动跑起来。
这就是完美~
如果你已经配置了opencv,有问题或者没问题,避免方法冲突可以清掉现有配置,以现在这种方法来实现最佳配置。
1.下载OpenCV:这里选择2.4.10
下载后,我们得到一个7z的exe文件压缩包,双击解压缩到指定目录如下图:2.修改目录名
a.将build/x86下的vc10、vc11、vc12(如果有vc9、vc13等,一样修改,后面加0即可),修改为vc100、vc110、vc120,如图b.将build/x64下的vc10、vc11、vc12(如果有vc9、vc13等,一样修改,后面加0即可),修改为vc100、vc110、vc120,如图
c.将build下的x86修改为win32
3.打开visual studio(无论你什么版本都行),这里以vs2013为例,新建一个控制台项目:
a.选择配置管理器-新建解决方案平台-选择x64,确定即可,如图:
b.选择视图-属性管理器
c.填入头文件和库文件路径
这里库的路径是如下,该库路径是全部通用:
H:\opencv2.4.10\build/$(Platform)/vc$(PlatformToolsetVersion)/staticlib
d.添加宏定义:_CRT_SECURE_NO_WARNINGS
4.写程序
在代码中写下:[code]#include "stdafx.h" #include <cv.h> #include <opencv2/core/core.hpp> #include <highgui.h> using namespace cv; int _tmain(int argc, _TCHAR* argv[]) { Mat img(300, 300, CV_8UC3); img.setTo(Scalar(0, 255)); imshow("Hello OpenCV", img); waitKey(); return 0; }
a.打开cv.h
b.在cv.h中添加一句:#include <opencv/cv_import_static_lib.h>
c.打开core.hpp
d.在core.hpp中添加一句:#include <opencv/cv_import_static_lib.h>
e.core.hpp上点右键,打开core.hpp所在目录,进入到opencv头文件目录下,然后转到:H:\opencv2.4.10\build\include\opencv
f.在目录中新建文本文件.txt,并将如下内容粘贴并保存
[code]#pragma once #ifdef WIN32 #include <opencv2/core/version.hpp> //定义宏,保证在debug模式下,导入opencv_xxxd.lib,release模式下导入opencv_xxx.lib #ifdef _DEBUG # define CC_CVLIB(name) "opencv_" name CC_CVVERSION_ID "d.lib" # define CC_CVLIB_2(name) "opencv_" name CC_CVVERSION_ID2 "d.lib" # define CC_LIB(name) name "d.lib" #else # define CC_CVLIB(name) "opencv_" name CC_CVVERSION_ID ".lib" # define CC_CVLIB_2(name) "opencv_" name CC_CVVERSION_ID2 ".lib" # define CC_LIB(name) name ".lib" #endif //对于静态库,必须导入如下这些库 #pragma comment(lib, "kernel32.lib") #pragma comment(lib, "user32.lib") #pragma comment(lib, "gdi32.lib") #pragma comment(lib, "Vfw32.lib") #pragma comment(lib, "winspool.lib") #pragma comment(lib, "comdlg32.lib") #pragma comment(lib, "advapi32.lib") #pragma comment(lib, "shell32.lib") #pragma comment(lib, "ole32.lib") #pragma comment(lib, "oleaut32.lib") #pragma comment(lib, "uuid.lib") #pragma comment(lib, "odbc32.lib") #pragma comment(lib, "odbccp32.lib") #pragma comment(lib, "Comctl32.lib") //如果为3版,导入方式不同 #if CV_MAJOR_VERSION==3 //定义cv的库名称,2410版的,如果是其他版本,则修改为指定的就好了 #define CC_CVVERSION_ID "2410" #define CC_CVVERSION_ID2 "300" //导入静态库依赖 #pragma comment(lib, CC_LIB("IlmImf")) #pragma comment(lib, CC_LIB("libjasper")) #pragma comment(lib, CC_LIB("libjpeg")) #pragma comment(lib, CC_LIB("libpng")) #pragma comment(lib, CC_LIB("libtiff")) #pragma comment(lib, CC_LIB("libwebp")) #pragma comment(lib, "ippicvmt.lib") #pragma comment( lib, CC_CVLIB("calib3d") ) #pragma comment( lib, CC_CVLIB_2("calib3d") ) #pragma comment( lib, CC_CVLIB("contrib") ) //#pragma comment( lib, CC_CVLIB("core") ) #pragma comment( lib, CC_CVLIB_2("core") ) //#pragma comment( lib, CC_CVLIB("core") ) #pragma comment( lib, CC_CVLIB_2("features2d") ) #pragma comment( lib, CC_CVLIB("features2d") ) #pragma comment( lib, CC_CVLIB_2("flann") ) #pragma comment( lib, CC_CVLIB("flann") ) #pragma comment( lib, CC_CVLIB("gpu") ) #pragma comment( lib, CC_CVLIB_2("highgui") ) #pragma comment( lib, CC_CVLIB("highgui") ) #pragma comment( lib, CC_CVLIB_2("imgcodecs") ) #pragma comment( lib, CC_CVLIB_2("imgproc") ) #pragma comment( lib, CC_CVLIB("imgproc") ) #pragma comment( lib, CC_CVLIB("legacy") ) #pragma comment( lib, CC_CVLIB_2("ml") ) #pragma comment( lib, CC_CVLIB("ml") ) #pragma comment( lib, CC_CVLIB("ocl") ) #pragma comment( lib, CC_CVLIB("nonfree") ) #pragma comment( lib, CC_CVLIB_2("objdetect") ) #pragma comment( lib, CC_CVLIB("objdetect") ) #pragma comment( lib, CC_CVLIB_2("photo") ) #pragma comment( lib, CC_CVLIB("photo") ) #pragma comment( lib, CC_CVLIB_2("shape") ) #pragma comment( lib, CC_CVLIB_2("stitching") ) #pragma comment( lib, CC_CVLIB("stitching") ) #pragma comment( lib, CC_CVLIB_2("superres") ) #pragma comment( lib, CC_CVLIB("superres") ) #pragma comment( lib, CC_CVLIB_2("ts") ) #pragma comment( lib, CC_CVLIB("ts") ) #pragma comment( lib, CC_CVLIB_2("video") ) #pragma comment( lib, CC_CVLIB("video") ) #pragma comment( lib, CC_CVLIB_2("videoio") ) #pragma comment( lib, CC_CVLIB_2("videostab") ) #pragma comment( lib, CC_CVLIB("videostab") ) #pragma comment(lib, CC_LIB("zlib")) #else #define CC_CVVERSION_ID CVAUX_STR(CV_VERSION_EPOCH) CVAUX_STR(CV_VERSION_MAJOR) CVAUX_STR(CV_VERSION_MINOR) //导入静态库依赖 #pragma comment(lib, CC_LIB("IlmImf")) #pragma comment(lib, CC_LIB("libjasper")) #pragma comment(lib, CC_LIB("libjpeg")) #pragma comment(lib, CC_LIB("libpng")) #pragma comment(lib, CC_LIB("libtiff")) #pragma comment( lib, CC_CVLIB("calib3d") ) #pragma comment( lib, CC_CVLIB("contrib") ) #pragma comment( lib, CC_CVLIB("core") ) #pragma comment( lib, CC_CVLIB("features2d") ) #pragma comment( lib, CC_CVLIB("flann") ) #pragma comment( lib, CC_CVLIB("gpu") ) #pragma comment( lib, CC_CVLIB("highgui") ) #pragma comment( lib, CC_CVLIB("imgproc") ) #pragma comment( lib, CC_CVLIB("legacy") ) #pragma comment( lib, CC_CVLIB("ml") ) #pragma comment( lib, CC_CVLIB("ocl") ) #pragma comment( lib, CC_CVLIB("nonfree") ) #pragma comment( lib, CC_CVLIB("objdetect") ) #pragma comment( lib, CC_CVLIB("photo") ) #pragma comment( lib, CC_CVLIB("stitching") ) #pragma comment( lib, CC_CVLIB("superres") ) #pragma comment( lib, CC_CVLIB("ts") ) #pragma comment( lib, CC_CVLIB("video") ) #pragma comment( lib, CC_CVLIB("videostab") ) #pragma comment(lib, CC_LIB("zlib")) #endif //CV_MAJOR_VERSION #endif
g.将新建文本文件.txt改名为cv_import_static_lib.h
h.回到工程中,修改工程的所有配置属性为静态mfc:
i.点击执行或者按下Ctrl+F5
正常情况下,应该会出现这个窗口,算正式完成配置
5.后续每个新工程写程序的步骤
a.新建一个win32的工程并按照上面h步(回到工程中,修改工程的所有配置属性为静态mfc)的方法设置b.写任何你想要的opencv代码即可直接运行。
6.对于其他OpenCV项目以这种环境运行起来
a.删掉项目中附加依赖项中和opencv相关的lib配置或者代码中以#pragma comment配置的opencv库b.设置工程属性为静态mfc
c.即可执行
基于5和6看,你会发现,使用的时候是相当方便的,不会再受dll所干扰而浪费时间,摸不着头脑。
并且,这种模式,你能够在win32、x64、debug、release下完全跑起来,而不像之前,会出现很多异常。
另外,这模式是基于静态库的,也就是发布软件的时候非常方便,不需要携带任何opencv的dll文件。非常有利于做各种事情。
如果你在vs2010下配置的,那么以这个方式,在2013下也完全能够零改动跑起来。
这就是完美~
相关文章推荐
- Shell中一键添加作者,版权信息
- Linux下MySQL多实例免安装部署
- CentOS环境下安装Sqoop导入数据到HDFS
- 在 Linux 中使用 SoundConverter 轻松转换音频文件格式
- 是否应该立即将网站升级到Drupal 8?
- 为什么你不应该自行更新 Drupal 网站?
- OpenFire控制台输出日志
- pop3解析邮件,并下载附件
- apache-common-pool2(配置参数详解,以及资源回收,从池中获取资源,将资源返还给池
- linux_performance
- Linux bind DNS配置
- java 网站绑定微信公众平台(微信绑定,微信支付)
- Hadoop2.7.1集群安装笔记
- Tomcat response header & server info
- Linux上JDK、Apache、PHP5.5、Mysql的环境部署
- hadoop1.2.1伪分布式安装
- sqoop 导入导出
- centos 安装 nginx
- nginx 配置
- nginx 信号控制