【安装】Ubuntu16.04安装opencv3.4.1 和 opencv_contrib3.4.1

Ubuntu16.04安装opencv3.4.1 和 opencv_contrib3.4.1

  • 一、安装opencv3.4.1
  • 二、安装opencv_contrib3.4.1
      • 1.下载
      • 2.编译安装
      • 3. 环境测试
  • 三、调用opencv

一、安装opencv3.4.1

若之前装了ROS ,则已经装了cmake和opencv,无需再安装。

执行sudo dpkg --configure -a后报以下错误:

dpkg:错误:正在解析文件 ‘/var/lib/dpkg/updates/0017’ 第 0 行附近: 在字段名 #padding中有换行符

解决方案,执行以下两条命令:

sudo rm /var/lib/dpkg/updates/*
sudo apt-get update

1. 安装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 libjas

2. 使用CMake编译OpenCV源文件
将opencv-3.4.1.zip解压出来,然后进入解压后的文件夹opencv-3.4.1内,创建一个目录build,再进入build目录,打开终端。执行cmake命令。

cd  opencv-3.4.1/
mkdir build
cd  build 
#将~/opencv/opencv_contrib/modules/ 换成自已的contribute的路径
cmake -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=/usr/local -D OPENCV_EXTRA_MODULES_PATH=~/opencv/opencv_contrib/modules/ ..

/usr/local 是指默认将要 install 的路径; 后面的两点不可省略

如果编译失败,检查CMakeerror.log,出现#error "C++11 is not supported"以下问题,请再检查一遍opencv_contrib文件中的modules路径是否正确

Compilation failed:
source file: ‘/home/ning/0.Software/opencv-3.4.1/cmake/checks/cxx11.cpp’
check option: ‘’
===== BUILD LOG ===== Change Dir: /home/ning/0.Software/opencv-3.4.1/build/CMakeFiles/CMakeTmp

Run Build Command:"/usr/bin/make" “cmTC_4a8b7/fast” /usr/bin/make -f
CMakeFiles/cmTC_4a8b7.dir/build.make CMakeFiles/cmTC_4a8b7.dir/build
make[1]: Entering directory
‘/home/ning/0.Software/opencv-3.4.1/build/CMakeFiles/CMakeTmp’
Building CXX object CMakeFiles/cmTC_4a8b7.dir/cxx11.cpp.o /usr/bin/c++
-fPIE -o CMakeFiles/cmTC_4a8b7.dir/cxx11.cpp.o -c /home/ning/0.Software/opencv-3.4.1/cmake/checks/cxx11.cpp
/home/ning/0.Software/opencv-3.4.1/cmake/checks/cxx11.cpp:4:2: error:
#error "C++11 is not supported" #error "C++11 is not supported" ^ /home/ning/0.Software/opencv-3.4.1/cmake/checks/cxx11.cpp: In function
‘int main()’:
/home/ning/0.Software/opencv-3.4.1/cmake/checks/cxx11.cpp:11:10:
error: ‘res’ does not name a type
auto res = test();
^ /home/ning/0.Software/opencv-3.4.1/cmake/checks/cxx11.cpp:12:12:
error: ‘res’ was not declared in this scope
return res;
^ CMakeFiles/cmTC_4a8b7.dir/build.make:65: recipe for target ‘CMakeFiles/cmTC_4a8b7.dir/cxx11.cpp.o’ failed make[1]: ***
[CMakeFiles/cmTC_4a8b7.dir/cxx11.cpp.o] Error 1 make[1]: Leaving
directory
‘/home/ning/0.Software/opencv-3.4.1/build/CMakeFiles/CMakeTmp’
Makefile:126: recipe for target ‘cmTC_4a8b7/fast’ failed make: ***
[cmTC_4a8b7/fast] Error 2

===== END =====

3.安装

make -j4
sudo make install

二、安装opencv_contrib3.4.1

之前已经安装了opencv3.4.1,现在为了使用cuda_sift,需要加入opencv_contrib-3.4.1,以下在现有基础上安装opencv_contrib

1.下载

opencv版本:https://github.com/opencv/opencv/releases
opencv_contrib版本:https://github.com/opencv/opencv_contrib
!!!注意:若要选择版本,是在左上角 Tag 里选。
选择之后的 opencv 和 contrib 版本一定要对应!!!
把opencv_contrib-3.4.1文件夹放入opencv-3.4.1目录下
查看opencv版本:

pkg-config --modversion opencv

2.编译安装

1. 先注释掉anaconda(若已安装)
[注意]:若之前已安装过Anaconda,编译过程中会出现如:Makefile:160: recipe for target ‘all’ failed此类的错误!!!

原因是:安装了 Anaconda 后,python 和 gcc 用的都是 Anaconda 的版本,Anaconda 的 gcc 版本 system defalut 的版本低(参考:https://stackoverflow.com/questions/40322301/compile-opencv-3-on-ubuntu-16-04-linking-error-usr-lib-x86-64-linux-gnu-libsox)。
解决办法:在系统变量中注释 Anaconda 的环境变量:

sudo gedit ~/.bashrc

如下如所示:

//若有注释掉
$ export PATH="/usr/local/anaconda3/bin:$PATH"

【安装】Ubuntu16.04安装opencv3.4.1 和 opencv_contrib3.4.1_第1张图片
使生效:

source ~/.bashrc

2. 编译opencv_contrib
进入build目录下(之前opencv的build删除)

方法一:
图形化界面安装

//打开图形化界面
cmake-gui

为了使用cuda_sift,需要把with_cuda打开。
修改一下三处:
在这里插入图片描述在这里插入图片描述在这里插入图片描述
在configure编译过程中会提示报错,都是网络问题无法下载,如:
【安装】Ubuntu16.04安装opencv3.4.1 和 opencv_contrib3.4.1_第2张图片
【安装】Ubuntu16.04安装opencv3.4.1 和 opencv_contrib3.4.1_第3张图片

解决方法:
在CMakeDownloadLog.txt下查找 missing ,在周围找下载链接,用wget http://.......下载链接 进行下载(会保存在当前目录下),下载好后放到missing后面对应的文件目录中即可。

方法二:
在终端cmake:

cmake -D CMAKE_INSTALL_PREFIX=/usr/local -D WITH_OPENMP=ON -D WITH_CUDA=ON -D CMAKE_BUILD_TYPE=Release -D OPENCV_EXTRA_MODULES_PATH=../opencv_contrib-3.4.1/modules ..

3.编译

make -j4

4. 安装opencv:

sudo make install

3. 环境测试

main.cpp中内容如下:

using namespace std;
#include "opencv2/opencv.hpp"
// #include "opencv2/gpu/gpu.hpp"
using namespace cv;

int main()
{
    int num_devices = cv::cuda::getCudaEnabledDeviceCount();

    cout<<num_devices<<endl;
}

CMakeLists中内容如下:

# cmake needs this line
cmake_minimum_required(VERSION 2.8)

# Define project name
project(test)
# Find OpenCV, you may need to set OpenCV_DIR variable
# to the absolute path to the directory containing OpenCVConfig.cmake file
# via the command line or GUI
find_package(OpenCV 3.3.0 REQUIRED)

# If the package has been found, several variables will
# be set, you can find the full list with descriptions
# in the OpenCVConfig.cmake file.
# Print some message showing some of them
message(STATUS "OpenCV library status:")
message(STATUS "    version: ${OpenCV_VERSION}")
message(STATUS "    libraries: ${OpenCV_LIBS}")
message(STATUS "    include path: ${OpenCV_INCLUDE_DIRS}")

if(CMAKE_VERSION VERSION_LESS "2.8.11")
  # Add OpenCV headers location to your include paths
  include_directories(${OpenCV_INCLUDE_DIRS})
endif()

# Declare the executable target built from your sources
add_executable(opencv_example main.cpp)

# Link your application with OpenCV libraries
target_link_libraries(opencv_example ${OpenCV_LIBS})

编译运行,结果是显卡的个数。我是单显卡,显示结果1则安装成功。

三、调用opencv

我们在写调用opencv的程序时,需要手动地在CMakeList.txt文件中添加对opencv库的连接,即在CMakeList.txt中添加以下两行语句:

#寻找opencv库
find_package( OpenCV REQUIRED )
#链接opencv库
target_link_libraries( 工程名 ${OpenCV_LIBS} )
find_package()可以指定 opencv 的版本,如find_package( OpenCV 3 REQUIRED )

你可能感兴趣的:(Linux安装,opencv,计算机视觉,人工智能)