Windows下编译OpenCV+OpenCV_Contrib

8 篇文章 0 订阅

Windows下编译OpenCV+OpenCV_Contrib

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版本。
    图1
  • 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
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值