下载和添加依赖包

1、首先更新 apt-get,在安装前最好先更新一下系统,不然有可能会安装失败。在终端输入:

sudo apt-get update
sudo apt-get upgrade

2、接着安装官方给的opencv依赖包,在终端输入:

sudo apt-get install build-essential
sudo apt-get install cmake git libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev
sudo apt-get install python-dev python-numpy libtbb2 libtbb-dev libjpeg-dev libpng-dev libtiff-dev libjasper-dev libdc1394-22-dev

3、接下来安装CMake-gui,在终端输入

sudo apt-get install cmake-qt-gui

下载安装包:
opencv-4.0.0 Source code(zip)
https://github.com/opencv/opencv/releases
23

opencv_contrib-4.0.0
https://github.com/opencv/opencv_contrib/releases 4.0.0.zip

配置OpenCV
解压 两个压缩包,然后将 opencv_contrib-4.0.0 放到 opencv-4.0.0 里面,双击进入解压出来的opencv-4.0.0 文件夹,右键打开终端(或者在别处打开终端,通过输入cd opencv-4.0.0 进入当前目录下),然后依次输入(不要忘了第三行的最后的空格和两个点):

mkdir build
cd build
cmake-gui ..

3、然后会弹出CMake的图形化界面,在上方的两个路径里面,选择好代码所在文件夹的路径和要安装的路径

4 点击左下方的Configure按钮,选择Unix Makefiles,选择Use default native compilers(默认),然后点击Finish

需要下载一些文件,要等待一段时间。然后CMake即载入默认配置,如下图所示:
窗口的中间部分即配置列表,这里和使用cmake命令直接生成makefile文件一致的。正如上文所述,这里通过图形界面的方式来进行配置,更加直观方便。
6、这里需要对几个地方进行修改:

)1)在CMAKE_BUILD_TYPE 值处输入RELEASE,其他保持不变(如果已经存在就不必修改)。
下方的CMAKE_INSTALL_PREFIX显示了默认的安装目录,这里我修改为: /usr/local/opencv4 (安装成功后,这个文件夹下面是有东西的,如果没有东西,安装没成功)
生成makefile文件最后执行 make install时就会安装到这个目录,这里可以根据个人需求更改。

2)在OPENCV_EXTRA_MODULES_PATH处,选择输入目录

然后选择opencv_contrib-4.0.0 文件夹中的modules文件夹,注意,不是只选中opencv_contrib-4.0.0 文件夹就好了,需要选中里面的modules文件夹! 如下图所示,然后点Choose。
注:OPENCV_EXTRA_MODULES_PATH 是用来指定要编译的扩展模块,其中包括OpenCV_contrib模块。

3)OPENCV_ENABLE_NONFREE 选中(SURF 专利问题)

点击Generate生成配置文件,这一步应该比较快就完成了。

8、接着,在build目录下打开终端,输入

make
sudo make install

配置环境变量
1、安装成功后还需要设置opencv的环境变量。打开文件:

sudo gedit /etc/ld.so.conf.d/opencv.conf

2、将以下内容添加到最后:

/usr/local/opencv4/lib

3、接下来配置库:

sudo ldconfig

4、更改环境变量:

sudo gedit /etc/bash.bashrc

5、在文件后添加:

PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/opencv4/lib/pkgconfig
export PKG_CONFIG_PATH

6、保存退出,在运行下面的例程之前,需要重新开启终端来使配置生效。

下面是 SURF 特征点检测 测试代码

#include <iostream>
#include <vector>
#include <opencv2/xfeatures2d.hpp>
#include <opencv2/highgui.hpp>using namespace cv;
using namespace std;int main()
{Mat img1 = imread("/home/zhangjun/Pictures/bookobject.jpg",1);Mat img2 = imread("/home/zhangjun/Pictures/bookscene.jpg",1);if ((img1.data == NULL)||(img2.data ==NULL)){cout << "No exist" << endl;return -1;}Ptr<Feature2D> surf = xfeatures2d::SURF::create(1000);vector<KeyPoint> keypoints_1, keypoints_2;Mat descriptors_1, descriptors_2;surf->detectAndCompute(img1, Mat(), keypoints_1, descriptors_1 );surf->detectAndCompute(img2, Mat(), keypoints_2, descriptors_2 );drawKeypoints(img1, keypoints_1, img1);drawKeypoints(img2, keypoints_2, img2);namedWindow("img1",0);resizeWindow("img1",500,500);imshow("img1", img1);namedWindow("img2",0);resizeWindow("img2",500,500);imshow("img2", img2);FlannBasedMatcher matcher;std::vector< DMatch > matches;matcher.match( descriptors_1, descriptors_2, matches );double max_dist = 0; double min_dist = 100;for( int i = 0; i < descriptors_1.rows; i++ ){ double dist = matches[i].distance;if( dist < min_dist ) min_dist = dist;if( dist > max_dist ) max_dist = dist;}printf("-- Max dist : %f \n", max_dist );printf("-- Min dist : %f \n", min_dist );std::vector< DMatch > good_matches;for( int i = 0; i < descriptors_1.rows; i++ ){ if( matches[i].distance <= max(2*min_dist, 0.02) ){ good_matches.push_back( matches[i]); }}Mat img_matches;drawMatches( img1, keypoints_1, img2, keypoints_2,good_matches, img_matches, Scalar::all(-1), Scalar::all(-1),vector<char>(), DrawMatchesFlags::NOT_DRAW_SINGLE_POINTS );namedWindow("Good Matches",0);resizeWindow("Good Matches",800,800);imshow( "Good Matches", img_matches );for( int i = 0; i < (int)good_matches.size(); i++ ){ printf( "-- Good Match [%d] Keypoint 1: %d  -- Keypoint 2: %d  \n",i, good_matches[i].queryIdx, good_matches[i].trainIdx ); }waitKey(0);return 0;
}

CMakeLists.txt

set(CMAKE_CXX_FLAGS "-std=c++11")
cmake_minimum_required(VERSION 3.4)project( SURF_test )set(OpenCV_DIR "/home/zhangjun/SoftWare/opencv-4.0.0/build")find_package( OpenCV REQUIRED )add_executable( SURF_test surf_test.cpp )target_link_libraries( SURF_test ${OpenCV_LIBS} )

编译运行:
cmake .
make
./SURF_test

(gcc 版本 6.5.0)

ubuntu 16.0.4 opencv 4.0.0 + opencv_contrib 4.0.0 cmake-gui 安装相关推荐

  1. Ubuntu 16.04下opencv 3.4.11 的安装及使用示例

    目录 一.安装Opencv 1.安装包 2.配置环境 二.使用示例----图片 三.使用示例----视频 1.虚拟机获取摄像机权限 2.播放视频 3. 录制视频 四.总结 五.参考内容 一.安装Ope ...

  2. ubuntu 16.0.4 opencv 3.4.1 + opencv_contrib 3.4.1 cmake-gui 安装

    https://blog.csdn.net/jindunwan7388/article/details/80397700 下载和添加依赖包 1.首先更新 apt-get,在安装前最好先更新一下系统,不 ...

  3. Ubuntu 16.04 64位中文版 配置 LAMP+phpMyAdmin PHP(7.0)开发环境

    1.安装 Apache Web服务器. 终端:sudo apt-get install apache2 apache2-doc -y,然后测试是否安装成功. 浏览器地址栏输入:http://local ...

  4. 在Ubuntu 16.0.4.5 LTS上安装python 2.7版本的cv2模块

    简介 OpenCV是一个C++库,用于实时处理计算机视觉方面的问题,涵盖了很多计算机视觉领域的模块.  OpenCV有两个Python接口,老版本的cv模块使用OpenCV内置的数据类型,新版本的cv ...

  5. Visual Studio 2017环境cmake编译opencv 4.3.0+opencv_contrib 4.3.0(保证成功,保姆级教学,呕心沥血)

    前言:为什么要装opencv_contrib opencv3的版本之后只包含基本内容,众多著名的检测算子(如SIFT.SURF和ORB等内容)因为版权问题转移到了一个名为xfeature2d的第三方库 ...

  6. openssl qt linux 安装,在Ubuntu 16.04.1上使用OpenSSL构建Qt失败

    我花了一周的时间尝试在Ubuntu 16.04.1 x64上使用OpenSSL构建Qt5.8.0. 首先,我下载了OpenSSL v1.0.2k的源代码.然后我用命令配置它 ./Configure - ...

  7. 来自官方文档的Ubuntu 16.04 + tensorflow-GPU 配置

    I  Preprare for CUDA installation 官方文档:http://docs.nvidia.com/cuda/cuda-installation-guide-linux/ind ...

  8. 深度学习 GPU环境 Ubuntu 16.04 + Nvidia GTX 1080 + Python 3.6 + CUDA 9.

    本节详细说明一下深度学习环境配置,Ubuntu 16.04 + Nvidia GTX 1080 + Python 3.6 + CUDA 9.0 + cuDNN 7.1 + TensorFlow 1.6 ...

  9. Ubuntu 16.04源码搭建ELK日志分析系统(Elasticsearch+Logstash+Kibana)

    ELK环境 : 操作系统:Ubuntu 16.04 RAM:4GB CPU:2 注意 : 5.0版本之前可以在启动指令后跟:-Des.insecure.allow.root=true或者修改elast ...

  10. Ubuntu 16.04 安装好之后需要做的15件事

    看到这篇文章说明你已经从老版本升级到 Ubuntu 16.04 或进行了全新安装,在安装好 Ubuntu 16.04 LTS 之后建议大家先做如下 15 件事.无论你是刚加入 Ubuntu 行列的新用 ...

最新文章

  1. MPB:湖南师大尹佳组-​乳酸菌益生菌表面粘附能力的检测
  2. 新发现为类脑计算机开辟了道路
  3. Nginx 的recv() failed 错误解决一例
  4. 初步解读Golang中的接口相关编写方法
  5. 修改sublime列编辑快捷键
  6. avalon框架,简单的MVVM
  7. WCF中的管道——管道类型
  8. opencv-api threshold
  9. 什么是软件测试中的黑天鹅
  10. Spring Boot 2.X 如何优雅的解决跨域问题?
  11. DP4 最小花费爬楼梯
  12. 联想打印机7256显示更换墨盒_联想打印机M7605D墨粉更换后还在提示更换墨粉盒...
  13. cmd下批量pingIP地址
  14. 微分方程和线性代数(分离变量法开始)
  15. sms 短信服务说明
  16. javaweb大全:地址来自 孤傲苍狼
  17. hive笔记(与上一偏 《hadoop集群搭建》结合)
  18. 获取微信用户openid
  19. Django的数据库创建、连接与迁移
  20. MODBUS通信协议代码

热门文章

  1. R语言-包的安装、载入及使用方法
  2. Python程序打包
  3. 子图同构问题与Ullmann Algorithm 算法(一)
  4. gpio引脚介绍 树莓派3b_使用微创联合M5S空气检测仪、树莓派3b+、prometheus、grafana实现空气质量持续监控告警WEB可视化...
  5. 如何用R进行单因素方差分析
  6. rust 手动关闭子线程_从零开始写 OS (9) —— 内核线程
  7. MPB:林科院袁志林组-​内生镰刀菌基因组染色体级别组装和注释
  8. “我付了钱,为何要说谢谢?”
  9. Nature Protocols:整合高通量组学数据集鉴定潜在机制联系的计算框架
  10. pandas将dataframe的索引转化为列表list数据(convert dataframe index into a list)