Windows下编译OpenCV+OpenCV

it2023-02-11  83

Windows下编译OpenCV+OpenCV_Contrib

0 OpenCV及OpenCV_Contrib1 准备工作2 CMake生成VS2017工程 2.1 OpenCV4.0.1 编译配置2.2 OpenCV_Contrib4.0.1编译配置2.3 生成工程 3 VS2017生成解决方案及安装文件4 VS2017配置OpenCV开发环境 4.1 配置环境变量4.2 VS2017工程包含(include)目录的配置4.3 VS2017工程库(lib)目录的配置4.4 链接库的配置 5 测试代码 5.1 导向滤波器(Guided Filter)5.2 SIFT特征5.3 SURF特征 参考文献

0 OpenCV及OpenCV_Contrib

OpenCV_Contrib是OpenCV的扩展模块,其中包含着一些新的算法(可能不稳定)和涉及知识产权保护的算法,OpenCV提供的windows下编译好的动态库并不包括OpenCV_Contrib中的算法,要想使用这些算法需要对OpenCV源码和OpenCV_Contrib源码进行编译,生成完整的动态库,而不是使用官方提供的已经编译好的动态库。 OpenCV对应版本下载链接 OpenCV_Contrib对应版本下载链接

1 准备工作

Windows10(可以上网) VS2017 CMake3.12.4 OpenCV4.0.1 OpenCV_Contrib4.0.1

1.3 cmake 下载 cmake-3.17.1-win64-x64.zip 压缩包,到 /bin 目录下,点击 cmake-gui 运行。 注:根据操作系统的不同,选择相应的版本,cmake 下载页 https://cmake.org/download/ 或 https://github.com/Kitware/CMake/releases

1.4 OpenCV 首先,选择 “Source code”,下载 GitHub 中的 OpenCV 源码 GitHub 链接 https://github.com/opencv/opencv/releases 其次,按照类似的步骤,在 GitHub 中下载 opencv_contrib 的源码压缩包

GitHub 链接 https://github.com/opencv/opencv_contrib/releases

最后,将两个 zip 包解压缩,等待编译。

2 CMake生成VS2017工程

2.1 OpenCV4.0.1 编译配置

1 打开CMake,设置“where is the source”目录为OpenCV文件夹中的source目录;2 设置“where to build binaries”目录为自己新建的编译目录,英文路径;3 点击Configure,弹出对话框选择VS版本。 4 选择对应的VS版本,并选择win64,点击Finish。 5 等待第1次配置完成,发现有些项是红色的,需要再点击一次configure,发现红色的项变为白色,即完成OpenCV的编译配置。

2.2 OpenCV_Contrib4.0.1编译配置

1 设置“OPENCV_EXTRA_MODULES_PATH”的值为opencv_contrib文件夹中的modules 注意目录不能用左斜线,需要用右斜线,否则后续会出现错误!!!

2 使“WITH_CUDA”选项未被选中

3 使“OPENCV_ENABLE_NONFREE”选项为勾选状态

4 使“BUILD_opencv_world”选项为勾选状态,则最终只生成一个动态库。

5 点击Configure,第1次配置完成后有选项为红色,再次点击Configure,则红色变为白色,OpenCV_Contrib编译配置完成。

2.3 生成工程

1 点击Generate,生成VS工程。

2.4 Python 问题

因为电脑中装了 Python 3.6.4,结果在下面步骤的 Debug 模式下,生成时出现了如下错误:

这是因为安装 python 时,并不会安装 debug 版本,于是,回到 python 安装界面,选择 debug 版本

如此,则可在 debug 模式下,顺利生成相应的库文件

3 VS2017生成解决方案及安装文件

1 打开第二步生成的OpenCV.sln,并选择Debug x64调试环境,依次点击生成—>生成解决方案。 2 等待一段时间得到如下结果。 3 右键点击CMakeTargets下的INSTALL—>仅用于此项目—>仅生成INSTALL,最终在install目录下生成编译好的Debug库。

4 将Debug改为Release,再依次点击生成—>生成解决方案,等待一段时间结果如下。 5 右键点击CMakeTargets下的INSTALL—>仅用于此项目—>仅生成INSTALL,最终在install目录下生成编译好的Release库。

将 install 目录下生成的所有文件,拷贝到需要进行 OpenCV 配置的文件夹中

4 VS2017配置OpenCV开发环境

4.1 配置环境变量

【此电脑】—>【(右键)属性】—>【高级系统设置】—>【高级(标签)】—>【环境变量】—>(双击)系统变量中的Path—>在变量值里面添加相应的路径。

4.2 VS2017工程包含(include)目录的配置

4.3 VS2017工程库(lib)目录的配置

4.4 链接库的配置

5 测试代码

5.1 导向滤波器(Guided Filter)

#include "pch.h" #include <iostream> #include "opencv2/opencv.hpp" #include "opencv2/ximgproc.hpp" using namespace cv; int main() { Mat guidanceImage = imread("tiananmen1.bmp",0);//读取灰度图 if (!guidanceImage.data) { std::cout << "Guidance Image is empty" << std::endl; return -1; } imshow("Guidance",guidanceImage); Mat srcImage = imread("transmission.jpg",1); if (!srcImage.data) { std::cout << "Source Image is empty" << std::endl; return -2; } imshow("input",srcImage); Mat res; ximgproc::guidedFilter(guidanceImage, srcImage, res, 30,0.001,-1); imshow("result", res); waitKey(0); return 0; }

5.2 SIFT特征

#include "pch.h" #include <iostream> #include "opencv2/opencv.hpp" #include "opencv2/xfeatures2d.hpp" using namespace cv; int main() { Mat srcImage = imread("right.jpg", 1); if (!srcImage.data) { std::cout << "Source Image is empty" << std::endl; return -1; } imshow("srcImage", srcImage); Ptr<Feature2D> sift = xfeatures2d::SIFT::create(); std::vector<KeyPoint> keypoints; Mat descriptors; sift->detectAndCompute(srcImage, noArray(), keypoints, descriptors); drawKeypoints(srcImage, keypoints, descriptors, Scalar(0, 255, 0)); imshow("sift", descriptors); waitKey(0); return 0; }

5.3 SURF特征

#include "pch.h" #include <iostream> #include "opencv2/opencv.hpp" #include "opencv2/xfeatures2d.hpp" using namespace cv; int main() { Mat srcImage = imread("right.jpg", 1); if (!srcImage.data) { std::cout << "Source Image is empty" << std::endl; return -1; } imshow("srcImage", srcImage); Ptr<Feature2D> surf = xfeatures2d::SURF::create(); std::vector<KeyPoint> keypoints; Mat descriptors; surf->detectAndCompute(srcImage, noArray(), keypoints, descriptors); drawKeypoints(srcImage, keypoints, descriptors, Scalar(0, 255, 0)); imshow("surf", descriptors); waitKey(0); return 0; }

参考文献

[1] OpenCV3.4.1+opencv_contrib编译:windows10 [2]OpenCV - Windows(win10)编译opencv + opencv_contrib

最新回复(0)