OpenCV是一个跨平台计算机视觉库,目前做图像处理很多都有用到。初学OpenCV的时候,觉得这玩意的安装和配置是一件很复杂神奇的事情,后来写代码慢慢多起来,对如何封装动态库、如何调用动态库有了了解,发现OpenCV的所谓安装和配置,就是简单的加载动态库而已。
所以,本文主要就是以配置OpenCV为例写一下如何静态调用dll
1、首先下载Opencv:
下载地址:https://opencv.org/opencv-4-1/
别告诉我你连下载都不会
2、 安装
C盘或者D盘你随意
3、打开VS
选择 文件->新建->项目
4、新建项目
选择最基础的套餐:windows控制台程序
修改好名字之后确定, 进入后你不妨先写一个hello world 的小程序(●´∀`●)
接下来就是配置OpenCV
5、新建配置文件
这样做的目的是避免每次新建工程后都要配置 opencv,我们做一个配置文件,每个新工程都加载 这个配置文件即可
如果其他dll也会在多工程中调用,也可以用这个方法
5.1如下图先找到 属性管理器
(在“视图”下拉菜单中没有的话,点其中的“其他视图”)
5.2新建属性表
由于我下载的OpenCV是4.1.0版本,只支持64位,所以这里需要注意的事,程序只能写64位的,属性配置也只需要配置64位,如果需要32位的,建议下载较旧的版本,比如3.0及以前的版本。
如上图,在 属性管理器中,选择“Debug | x64”,右键,选择“添加新项目属性表”
进行命名,例如针对Debug,我的命名如下“OpcvX64Debug.props”
点击“添加”进行添加
同样的方法,在“Release | x64”下添加OpcvX64Release.props属性表
6、配置OpenCV ,呸, 配置dll
首先是debug
6.1双击打开刚才添加的“OpcvX64Debug.props”,在“VC++目录”->包含目录 中编辑添加Opencv库的头文件的目录
即“.h”文件做在目录
“D:\Program Files\opencv410\opencv\build\include”
“D:\Program Files\opencv410\opencv\build\include\opencv2”
这样做的目的是,在 预编译时,可以直接include头文件,而不需要 一一添加到项目中,再在include出写很长的路径了
6.2 接着在 VC++目录->库目录 中添加lib文件所在的路径
对于OpenCV,是如下:“D:\Program Files\opencv410\opencv\build\x64\vc15\lib”
对于不同的VS版本,对应的VC版本有所不同,其对应关系如下:
vc9 - VS2008
vc10 - VS2010
vc11 - VS2012
vc12 - VS2013
vc13 - VS2014
vc14 - VS2015
vc15 - VS2017
6.3 链接器->输入->附加依赖项
将上一步路径下的lib 文件名复制进去
(这里需要说明,opencv对debug和release做了区分,末尾以“d”结尾的是debug下要添加的,没有“d”的是release下添加的)
结束后,点击应用并确定
右键点击 “OpcvX64Debug.props”,点击保存
以上,就基本配置ok了
同样方法,将第5步中添加的“OpcvX64Release.props”也进行配置,其中要注意的是:链接器->输入->附加依赖项 中添加的lib文件名是不带“d”结尾的。
一定注意,配置完成后要右键保存属性表
保存后, 即可在项的目录下找到这两个文件
将这两个文件存好,在新建其他工程项目时,在其属性管理器中,进行添加即配置完成
7 关于环境变量
参考其他 人的opencv说明,你可能会问,为什么没有添加环境变量这一步呢
作为学习研究,应该有这一部,但如果你基于opencv写的程序或者dll要发给别人,我不建议添加环境变量
你只需要将用到的opencv的dll加到你程序的目录下即可(生成的exe/dll目录下)
--------------------------------------------------------------------------------------------------------------------
测试:
编写 如下简单代码进行测试
(其中“1.png”是图片全路径,如果图片在工程目录下,则直接使用名称即可)
#include <iostream>
#include <opencv.hpp>
using namespace std;
using namespace cv;
int main()
{
Mat img = imread("1.png", 1); //读取图像
namedWindow("test", WINDOW_AUTOSIZE);
imshow("test", img); //显示图像
waitKey(0);
return 0;
}
由于没有配置环境变量,在运行时,会弹出如下错误:
之所以找不到,是应为在环境变量里的所有路径下没有找到,再一个,在程序文件坐在的目录下也没找到,既然不添件环境变量,那么我们将这个dll文件复制到程序所在目录里就可以了
如上图,是debug和release下对应的两个dll文件,将对应的复制到编译生成的exe文件内即可
-------------------------------------------------------------------------------------------------------------------------------
工程问路:
解决方案资源管理器->右键项目名->在文件 资源管理器中打开文件夹
打开后如下图:
编译生成的exe、dll等则在其上一级目录的 x64文件夹下的debug、release文件夹内(32位,直接在上一级目录的debug、release文件夹)