目录
- Opencv安装、环境变量配置
- Visual Studio 库的两种配置
本文使用操作系统为Windows10,仅适用于windows环境Visual Studio编译器上的 Opencv开发配置。Opencv所有平台通用的配置方式是从官网下载源码,然后使用CMake编译成对应平台的库,比如Windows平台,使用CLion IDE + gcc配置Opencv,就需要用CMake + gcc将源码编译成库文件,然后然后CLion才可以配置并使用这些库(主要保持编译器版本匹配)。看起来很麻烦对吧,但有一个例外,那就是Visual Studio编译器,Opencv官方提供了该编译器的Opencv预编译库,不需要自己编译。所以在windows上可以使用VS的小伙伴不要自己编译库了,麻烦又容易出错。
Opencv安装、环境变量配置
请在官网下载符合你要求的版本,Releases - OpenCV,下载的是压缩包,双击解压即可,无需像类似应用程序安装一样的步骤,解压目录既是库的保存目录。
接下来需要配置动态库的环境变量,在刚才的解压目录中找到“opencv\build\x64\vc15\bin”,这是Opencv动态库的位置,因为我下载的是64位Opencv,所以去x64。在目前最新的4.6版本中,提供了vc14和vc15两个版本,这表示编译库使用的msvc(VS编译器)版本,vc15对应msvc2017。自己使用VS版本应当大于vc版本,我使用的是VS2019,所以配置vc15的库。
现在需要配置系统环境变量了,将刚才bin目录“E:\Opencv_4.6.0\opencv\build\x64\vc15\bin”(本文是这个目录)添加到Path中,很多人都是这样配的,但我推荐另一种。请在系统变量中增加“OPENCV_DIR”,它的目录是“E:\Opencv_4.6.0\opencv\build\x64\vc15“,然后将“%OPENCV_DIR%\bin”加入Path,为什么要多这一步呢?在VS中配置Opencv库时,我们将使用“OPENCV_DIR”代替“E:\Opencv_4.6.0\opencv\build\x64\vc15”,不仅VS中可以这样代替,整个系统中都是可以的,一旦库的位置发生变动或者更改库,只需要修改“OPENCV_DIR”即可。
Visual Studio 库配置
不仅适用VS Opencv配置,其他库的配置过程也是如此。这里很多博客做了误导,或者有一些不必要步骤,其实只需要三步:包含目录、库目录、附加依赖项。但也有两种配置方式,同学们任选一种即可。
配置方式一
创建一个VS项目,点击”项目“——>”属性“,打开项目配置属性页,”VC++目录“——>”包含目录“,将头文件目录”E:\Opencv_4.6.0\opencv\build\include“写入。前文说过这里的写法是”$(OPENCV_DIR)\..\..\include“,”..\“表示上一级目录。然后配置”VC++目录“——>”库目录“,这里写入静态库和动态库的目录“$(OPENCV_DIR)\lib”。最后,“链接器”——>“输入”——>“附加依赖项”,这里写入项目将调用的具体库名称,Opencv已经将整合为一个静态库文件“opencv_world460.lib”,可以在“opencv\build\\x64\vc15\lib”看到,相信大家也看到了“opencv_world460.lib”命名规律。现在配置好了吗?
哦,对了,属性页最上面的配置管理器,我在这里Release/x64,那么换成Debug/x64呢,刚才的配置就没了,因为开发程序Debug和Release都要,所以还得配置DeBug。步骤和要填的目录都一样,但有一个细微的不同之处,“附加依赖项”填入“opencv_world460d.lib”,带d.lib在Debug模式使用,不带d.lib在Release模型使用。由于库是64位的版本,所以只在x64运行。
配置方式二
配置的第一个属性换成“C/C++”——>“常规”——>“附加包含目录”,与方法一中“包含目录”含义和目录一样;第二个属性换成“链接器”——>“常规”——>“附加库目录”,第三个属性同上。
好了,配置完成了,找个代码测试一下吧。
#include <opencv2/core.hpp>
#include <opencv2/imgcodecs.hpp>
#include <opencv2/highgui.hpp>
#include <iostream>
using namespace cv;
using namespace std;int main()
{
Mat image;
image = imread("D:/VScode/luna.jpg", IMREAD_COLOR); // Read the file
if (image.empty()) // Check for invalid input
{
cout << "Could not open or find the image" << std::endl;
return -1;
}
namedWindow("Display window", WINDOW_AUTOSIZE); // Create a window for display.
imshow("Display window", image); // Show our image inside it.
waitKey(0); // Wait for a keystroke in the window
return 0;
}