据官方说法,目前还不是太稳定的算法模块都在opencv_contrib里边,由于不稳定,所以不能在release版本里发行,只有在稳定以后才会放进release里边。但是这里边有很多我们经常要用的算法,比如SIFT,SURF等(在xfeatures2d 模块里边)。官网提供了说明,可以把opencv_contrib扩展模块添加编译到已安装的opencv3里边。

同时我们还需要编译opencv的GPU模块,以便在GPU上加速执行这些算法。

1.点[Brouse Source…],选择OpenCV源码那个sources文件夹的路径。 
点[Brouse Build…],选择要生成的工程的路径。如下图:

2.点击 [Configure],出现对话框说文件夹不存在要不要新建文件夹,点yes,然后出现对话框选择生成的工程版本,如下图:

3.点[Finished],一段读条后会生成工程。完成后可以检查一下窗口下部的框,如果正确安装、配置CUDA,应该会有如下字样 CUDA detected+版本号:

4.检查一下WITH_CUDA选项,如果Cmake检测到你安装了CUDA,应该是自动勾上的。如果没自动勾上那就把它勾上。如下图:

5.下载opencv_contrib模块,链接:https://github.com/opencv/opencv_contrib

解压后,我把它放到了opencv3.3的目录下

6.在cmake界面找到OPENCV_EXTRA_MODULES_PATH,修改其值为:D:/opencv3.3/opencv_contrib-master/modules,就是第5步中modules的路径

7.确认好选项之后再按[Configure]

8.按[Generate]生成工程,如果配置和生成工程完全ok底下应该有Configuring done和Generating done两行。如下图:

9.关掉cmake,关掉杀毒软件,在build_opencv3.3_contrib找到OpenCV.sln用VS2015打开,选择生成-重新生成解决方案。

等待两个多小时……

10.编译好后,找到解决方案目录里的[CMakeTargets]项展开的[INSTALL]项,右键->[Project Only(仅项目)]->[Build Only INSTALL(仅生成INSTALL)]。这时在D:\build_opencv3.3_contrib\install\x64\vc14生成了编译好的库(默认生成debug的库,修改为release编译生成release的库)。

给windows操作系统添加“系统环境变量”path环境变量:D:\build_opencv3.3_contrib\install\x64\vc14\bin

11.测试gpu模块与opencv_contrib模块。

新建VS2015控制台应用程序,

工程属性--配置属性--VC++目录--包含目录  中添加:

D:\build_opencv3.3_contrib\install\include\opencv;

D:\build_opencv3.3_contrib\install\include\opencv2;

D:\build_opencv3.3_contrib\install\include;

工程属性--配置属性--VC++目录--库目录  中添加:

D:\build_opencv3.3_contrib\install\x64\vc14\lib

工程属性--配置属性--链接器--输入--附加依赖项 中添加:

opencv_aruco331d.lib
opencv_bgsegm331d.lib
opencv_bioinspired331d.lib
opencv_calib3d331d.lib
opencv_ccalib331d.lib
opencv_core331d.lib
opencv_cudaarithm331d.lib
opencv_cudabgsegm331d.lib
opencv_cudacodec331d.lib
opencv_cudafeatures2d331d.lib
opencv_cudafilters331d.lib
opencv_cudaimgproc331d.lib
opencv_cudalegacy331d.lib
opencv_cudaobjdetect331d.lib
opencv_cudaoptflow331d.lib
opencv_cudastereo331d.lib
opencv_cudawarping331d.lib
opencv_cudev331d.lib
opencv_datasets331d.lib
opencv_dnn331d.lib
opencv_dpm331d.lib
opencv_face331d.lib
opencv_features2d331d.lib
opencv_flann331d.lib
opencv_fuzzy331d.lib
opencv_highgui331d.lib
opencv_img_hash331d.lib
opencv_imgcodecs331d.lib
opencv_imgproc331d.lib
opencv_line_descriptor331d.lib
opencv_ml331d.lib
opencv_objdetect331d.lib
opencv_optflow331d.lib
opencv_phase_unwrapping331d.lib
opencv_photo331d.lib
opencv_plot331d.lib
opencv_reg331d.lib
opencv_rgbd331d.lib
opencv_saliency331d.lib
opencv_shape331d.lib
opencv_stereo331d.lib
opencv_stitching331d.lib
opencv_structured_light331d.lib
opencv_superres331d.lib
opencv_surface_matching331d.lib
opencv_text331d.lib
opencv_tracking331d.lib
opencv_video331d.lib
opencv_videoio331d.lib
opencv_videostab331d.lib
opencv_xfeatures2d331d.lib
opencv_ximgproc331d.lib
opencv_xobjdetect331d.lib
opencv_xphoto331d.lib

可以在D:\opencv3.3\sources\samples\gpu\surf_keypoint_matcher.cpp找到一个测试例程,对其代码做简单修改如下:

#include <iostream>  

#include "opencv2/opencv_modules.hpp"
#include "opencv2/core.hpp"
#include "opencv2/features2d.hpp"
#include "opencv2/highgui.hpp"
#include "opencv2/cudafeatures2d.hpp"
#include "opencv2/xfeatures2d/cuda.hpp" using namespace std;
using namespace cv;
using namespace cv::cuda; int main()
{
GpuMat img1, img2;
img1.upload(imread("1.bmp", IMREAD_GRAYSCALE));
img2.upload(imread("2.bmp", IMREAD_GRAYSCALE)); cv::cuda::printShortCudaDeviceInfo(cv::cuda::getDevice()); SURF_CUDA surf; // detecting keypoints & computing descriptors
GpuMat keypoints1GPU, keypoints2GPU;
GpuMat descriptors1GPU, descriptors2GPU;
surf(img1, GpuMat(), keypoints1GPU, descriptors1GPU);
surf(img2, GpuMat(), keypoints2GPU, descriptors2GPU); cout << "FOUND " << keypoints1GPU.cols << " keypoints on first image" << endl;
cout << "FOUND " << keypoints2GPU.cols << " keypoints on second image" << endl; // matching descriptors
Ptr<cv::cuda::DescriptorMatcher> matcher = cv::cuda::DescriptorMatcher::createBFMatcher(surf.defaultNorm());
vector<DMatch> matches;
matcher->match(descriptors1GPU, descriptors2GPU, matches); // downloading results
vector<KeyPoint> keypoints1, keypoints2;
vector<float> descriptors1, descriptors2;
surf.downloadKeypoints(keypoints1GPU, keypoints1);
surf.downloadKeypoints(keypoints2GPU, keypoints2);
surf.downloadDescriptors(descriptors1GPU, descriptors1);
surf.downloadDescriptors(descriptors2GPU, descriptors2); // drawing the results
Mat img_matches;
drawMatches(Mat(img1), keypoints1, Mat(img2), keypoints2, matches, img_matches); namedWindow("matches", );
imshow("matches", img_matches);
waitKey(); return ;
}

使用CMake编译OpenCV3.0+OpenCV_contrib时所遇问题的解决方案

    在windows下使用CMake编译opencv+opencv_contrib的步骤,网上已有很多中文转载,介绍得都很详细。如果对“转载”不放心,可以查看opencv_contrib目录下的README.md,它才是中文翻译的原版。在这里主要解决编译中可能遇到的问题。

    • 如果使用VS2010作为IDE, 点击configure之后,可能会出现:error in configuration process project files may be invalid。 
      解决方案:这是vs2010的问题,不是CMake和opencv的问题,出现这个错误说明电脑中vs版本不兼容,查找以下两个路径:C:\Program Files(x86)\Microsoft Visual Studio 10.0\vc\bin\cvtres.exe和C:\Windows\Microsoft.NET\Framework\v4.0.30319\cvtres.exe。右键属性|详细信息, 查看两者版本号,删除/重命名较旧的版本,或者重新设置Path变量。

    • 如果在设置完扩展包之后(如下):

仍然出现 error in configuration process project files may be invalid。 
解决方案:可能是opencv与opencv_contrib的版本不匹配,如果是直接打开链接下载的opencv_contrib,则得到的是master版本,它一般是最新的稳定版,而你现在编译的opencv是3.0的版本,所以也需要opencv_contrib为3.0版。

把它作为扩展包的引用,就没有问题了。同时也解决了后续类似 “Unknown CMake command ‘ocv_download’ “的问题。

参考链接:

1、【opencv3.3】VS2015+opencv3.3 GPU模块编译(包含opencv_contrib模块)

2、OpenCV3的GPU模块编译

3、Windows7+VS2012下64位OpenCV3.0+CUDA7.5的编译和部署

4、【OpenCV入门教程之七】 玩转OpenCV源代码:生成OpenCV工程解决方案与OpenCV源码编译    -   浅墨_毛星云的CSDN博客

5、使用CMake编译OpenCV3.0+OpenCV_contrib时所遇问题的解决方案

6、vs2015下Cmake3.10编译Opencv3.4及opencv_contrib3.4在Windows10

7、opencv3.4+vs2015+win10安装过程问题解决

8、opencv3.4.0的CMake需联外网下载的.cache文件夹内容(ippicv等)

9、OpenCV3.4.0+contrib在VS2017下编译_win10 64位

Visual Studio下载链接:

1、Visual Studio Community下载 Community 2015

2、面向任何开发者的同类最佳工具

[转]VS2015+OpenCV3.3 GPU模块和opencv_contrib模块的编译以及采用CMake编译opencv_contrib时提示“No extra modules found in folder”问题的解决方案的更多相关文章

  1. CMake Error at cmake/OpenCVModule.cmake:295 (message): No extra modules found in folder:Please provide path to 'opencv_contrib/modules' folder

    其实,我们使用的opencv中要用的contrib/modules   是需要额外下载并在cmakelists.txt中指定的 git clone https://github.com/opencv/ ...

  2. ubuntu 14.04 64位 安装Opencv3.1.0 (包含opencv_contrib模块)

    写在前边: 据官方说法,目前还不是太稳定的算法模块都在opencv_contrib里边,由于不稳定,所以不能在release版本里发行,只有在稳定以后才会放进release里边.但是这里边有很多我们经 ...

  3. opencv3.10加入OPENCV_contrib模块

    在VS2015+opencv3.1进行算法研究时,遇到了一些模块在官网下载的里面是没有的,需要自己进行编译,参考以下链接 http://blog.csdn.net/liu798675179/artic ...

  4. opencv第二课,使用cmake编译OpenCV,并添加opencv_contrib模块

    一.下载安装cmake 想要在Windows平台下生成OpenCV的解决方案,我们需要一个名为cmake的开源软件,可以在camke的官网:http://www.cmake.org/上下载到 或者点击 ...

  5. win7下VS2015+opencv3.1.0配置

    由于opencv与vs的适配版本不同,本人在官网下载opencv3.1.0,其可以和VS2013.VS2015适配,文中以VS2015为例 opencv2.4.13-----vc11;vc12 ope ...

  6. opencv探索之路(一):win10 X64+VS2015+opencv3.10安装教程

    我的电脑64位Win10系统,现在利用VS2015安装opencv3.10.安装之路颇为艰辛,从一开始的VS2015的安装,到opencv的安装,都充满挑战,历经千辛万苦终于把opencv开发环境搭建 ...

  7. Win10 64位+VS2015+Opencv3.3.0安装配置

    Win10 64位+VS2015+Opencv3.3.0安装配置 1.我们首先下载VS2015.OpenCV3.3.0. 1.1 VS2015下载 在官网https://visualstudio.mi ...

  8. tensor搭建--windows 10 64bit下安装Tensorflow+Keras+VS2015+CUDA8.0 GPU加速

    windows 10 64bit下安装Tensorflow+Keras+VS2015+CUDA8.0 GPU加速 原文见于:http://www.jianshu.com/p/c245d46d43f0 ...

  9. 人脸识别(初学篇)-VS2015+opencv3.2的配置

    初学人脸识别,感觉安装也是一个很大的麻烦. 写在这里记录一下吧 一:先安装好我们需要的软件 首先安装Vs2015,在官网或者csdn搜一下应该找的到. 安装步骤没有太多讲究. 点击exe文件,我选择的 ...

随机推荐

  1. Android使用AOP

    这里不讲aop的概念,网上资料很多,这里只讲如何配置aop和自定义plugin. 1.使用场景 在android中,有些业务是公共的,例如:登录判断.获取权限.网络判断等一些公用的业务逻辑,这些都可以 ...

  2. Codeforces633G(SummerTrainingDay06-I dfs序+线段树+bitset)

    G. Yash And Trees time limit per test:4 seconds memory limit per test:512 megabytes input:standard i ...

  3. vue.js自定义指令详解

    写在文本前:相信在做vue的项目,你肯定接触了指令,我们常用vue内置的一些指令,比如v-model,v-text,v-if,v-show等等,但是这些内置指令不在本文的讲解范畴,本文想说的是其自定义 ...

  4. nginx禁止ip默认参数是$remote_addr无法禁止真实ip的问题

    由于网站使用了cdn所以$remote_addr获取的ip是cdn的ip,我现在先禁止某些ip访问发现无法禁止cdn传递过来的客户端的ip也就是$http_x_forwarded_for这个参数.比如 ...

  5. linux根目录下的文件夹及文件

    bin->放置执行文件的目录,但毕竟特殊,其下放置的是在单用户维护模式下还能被操作的命令.主要有cat.chmod.date. mv.mkdir.cp.bash等常用命令.dev->存放设 ...

  6. bootstrap和ajax相结合

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  7. Vue入门系列(五)Vue实例详解与生命周期

    Vue官网: https://cn.vuejs.org/v2/guide/forms.html#基础用法 [入门系列] (一)  http://www.cnblogs.com/gdsblog/p/78 ...

  8. java基础(十一) 枚举类型

    枚举类型Enum的简介 1.什么是枚举类型 枚举类型: 就是由一组具有名的值的有限集合组成新的类型.(即新的类). 好像还是不懂,别急,咱们先来看一下 为什么要引入枚举类型 在没有引入枚举类型前,当我 ...

  9. Linux —— Vi 命令介绍

    简介 vi编辑器是所有Unix及Linux系统下标准的编辑器,它的强大不逊色于任何最新的文本编辑器. 这里只是简单地介绍一下它的用法和一小部分指令. 由于对Unix及Linux系统的任何版本,vi编辑 ...

  10. 控制台中寄宿WCF服务

    一.首先创建一个类库,用来定义WCF服务 修改服务代码定义,具体代码如下 // 注意: 使用"重构"菜单上的"重命名"命令,可以同时更改代码和配置文件中的接口名 ...