【Win10】【VS2017】Opencv4配置contrib扩展


本来想直接做Opencv4.0例程的,但是跑第一个例程就遇到报错:“无法打开源文件"opencv2/ximgproc.hpp"”,一查才知道缺少contrib扩展。



1.准备编译工具

配置contrib需要CMake对Opencv进行编译,所以先进行准备工作:

1.1 CMake下载安装

下载链接: https://cmake.org/download/.
在这里插入图片描述找最新版本并且下载“msi”文件(别下错了…)。下载完成之后直接即可,选择安装路劲什么的都是常规操作,注意其中这一步选择addCmake to the system PATH for the current user
在这里插入图片描述
如果没有选择安装桌面快捷方式的,在这里找启动图标:
在这里插入图片描述

1.2 opencv_contrib下载安装

下载链接: https://github.com/opencv/opencv_contrib/releases.
在这里插入图片描述
选择你的opencv对应的版本。下载完成之后直接解压即可。


2.CMake编译

打开CMake,如图,上面输入你的Opencv的sources目录(注意不是刚刚下载的opencv_contrib的目录,是你自己opencv的目录),下面输入你自定义的输出目录。最后点左下角的“configure”即可。
在这里插入图片描述
然后选择对应vs的版本,64位系统选择Win64,默认的是Win32。
在这里插入图片描述
在这里插入图片描述
然后就是漫长的等待。。。之后显示“configuring done”"generating done"即表示安装成功,然后找到OPENCV_EXTRA_MODULES_RATH一项,添加你刚刚解压的opencv_contrib中的modules目录,最后选择generate开始编译。在这里插入图片描述
完成之后如果在你自定义的输出文件夹中找到“OpenCV.sln”文件,即表明编译成功。
在这里插入图片描述


3.VS编译

3.1 生成install文件

使用VS2017打开刚刚的“OpenCV.sln”文件。
在这里插入图片描述
如图所示点击“生成—>重新生成解决方案”,这会花好一会儿时间,耐心等待(我电脑太渣,等了很久):
在这里插入图片描述
“解决方案资源管理器—>CMakeTargets—>INSTALL—>仅用于项目—>仅生成INSTALL”然后又是等好一会儿
在这里插入图片描述
搞定。
在这里插入图片描述
最后到你自定义的那个文件夹确定一下,找到“install”文件夹,进去查看里面的内容:
在这里插入图片描述

3.2 配置VS2017+opencv_contrib

VS2017+opencv_contrib的配置和VS2017+opencv的配置是一样的,上一步中生成的“install”文件中的内容好比一个新版本的opencv,所以配置方式和以前一样。这里只给出截图,具体方法参考我的第一篇博客:链接: https://blog.csdn.net/weixin_41991128/article/details/83656543.
系统环境变量:
在这里插入图片描述
包含目录、库目录
在这里插入图片描述
附加依耐项
在这里插入图片描述

3.2.1 注意事项

其中有两点需要注意:
1.注意配置环境的路径;
2.附加依赖项有变化:opencv_contrib的依赖性如下(注意对应的版本号):

opencv_aruco400d.lib
opencv_bgsegm400d.lib
opencv_bioinspired400d.lib
opencv_calib3d400d.lib
opencv_ccalib400d.lib
opencv_core400d.lib
opencv_datasets400d.lib
opencv_dnn400d.lib
opencv_dnn_objdetect400d.lib
opencv_dpm400d.lib
opencv_face400d.lib
opencv_features2d400d.lib
opencv_flann400d.lib
opencv_fuzzy400d.lib
opencv_gapi400d.lib
opencv_hfs400d.lib
opencv_highgui400d.lib
opencv_imgcodecs400d.lib
opencv_imgproc400d.lib
opencv_img_hash400d.lib
opencv_line_descriptor400d.lib
opencv_ml400d.lib
opencv_objdetect400d.lib
opencv_optflow400d.lib
opencv_phase_unwrapping400d.lib
opencv_photo400d.lib
opencv_plot400d.lib
opencv_reg400d.lib
opencv_rgbd400d.lib
opencv_saliency400d.lib
opencv_shape400d.lib
opencv_stereo400d.lib
opencv_stitching400d.lib
opencv_structured_light400d.lib
opencv_superres400d.lib
opencv_surface_matching400d.lib
opencv_text400d.lib
opencv_tracking400d.lib
opencv_video400d.lib
opencv_videoio400d.lib
opencv_videostab400d.lib
opencv_viz400d.lib
opencv_xfeatures2d400d.lib
opencv_ximgproc400d.lib
opencv_xobjdetect400d.lib
opencv_xphoto400d.lib

如果你的版本号和我不一样,可以参考我这篇博客最后面使用cmd命令得到文件夹中所有文件名的方法:
链接: https://blog.csdn.net/weixin_41991128/article/details/83864713.

在这里插入图片描述
多说一句,这个时候配置多个opencv,就体现出使用属性表的重要性。需要哪个版本直接粘贴对应的属性表即可。


4.程序验证

验证代码如下,这个一个简化的直线提取的官方例程,使用了contrib扩展里的#include "opencv2/ximgproc.hpp"头文件。

#include <iostream>
#include "opencv2/imgproc.hpp"
#include "opencv2/ximgproc.hpp"
#include "opencv2/imgcodecs.hpp"
#include "opencv2/highgui.hpp"


using namespace std;
using namespace cv;
using namespace cv::ximgproc;


int main(int argc, char** argv)
{
	//在工程目录下放一张名字为"01.jpg"的图片
	Mat image = imread("01.jpg", IMREAD_GRAYSCALE);
	imshow("Input", image);
	if (image.empty())
	{
		return -1;
	}

	Ptr<LineSegmentDetector> lsd = createLineSegmentDetector();
	vector<Vec4f> lines_lsd;

	int length_threshold = 10;
	float distance_threshold = 1.41421356f;
	double canny_th1 = 50.0;
	double canny_th2 = 50.0;
	int canny_aperture_size = 3;
	bool do_merge = false;
	Ptr<FastLineDetector> fld = createFastLineDetector(length_threshold,
		distance_threshold, canny_th1, canny_th2, canny_aperture_size,
		do_merge);
	vector<Vec4f> lines_fld;

	for (int run_count = 0; run_count < 10; run_count++) 
	{
		lines_lsd.clear();
		int64 start_lsd = getTickCount();
		lsd->detect(image, lines_lsd);
		// Detect the lines with LSD
		double freq = getTickFrequency();
		double duration_ms_lsd = double(getTickCount() - start_lsd) * 1000 / freq;
	}
	// Show found lines with LSD
	Mat line_image_lsd(image);
	lsd->drawSegments(line_image_lsd, lines_lsd);
	imshow("LSD result", line_image_lsd);

	waitKey(0);
	return 0;
}

效果如下:
在这里插入图片描述

  • 9
    点赞
  • 74
    收藏
    觉得还不错? 一键收藏
  • 16
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 16
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值