Ubuntu16.04安装cmake以及编译opencv带上contrib的gpu版本

一.安装cmake

安装cmake相对简单。可以使用如下命令直接安装cmake。不过这样安装的cmake版本可能比较低,如果是想用在混合编程上不建议这样做。因为版本比较低可能会不支持,比如想用在Android上,cmake版本要求好像最低是3.6.0如果没有记错的话,而下面的命令安装的是3.4.0。建议先大致浏览一遍整个博客再进行安装。同时建议先看这篇博客,编译opencv碰到的问题。

sudo apt-get install cmake

手动安装cmake顺序:下载最新版本,或者这里下载指定版本(或者这里)。在Ubuntu中下载如下图所示版本。

解压下载的文件,在解压的文件中打开终端。然后执行如下命令:

./bootstrap
make
sudo make install

cmake安装与gcc的版本有关系,目前我的gcc版本为5.4.0尝试安装cmake-3.17.0版本失败。所以我就尝试安装cmake-3.15.0版本,但是在make install时出现file cannot create directory: /usr/local/doc/cmake-3.14。具体如下图:

出现安装失败,我没仔细看,还以为是cmake版本过高。所以又下载了cmake-3.14.0版本,再执行make install时还是出现上述问题。我就不得不仔细看了。其实上面都提示了需要sudo权限。所以需要使用sudo make install。

查看cmake是否安装成功(有输出版本号表示安装成功):

cmake --version

CMakeList.txt一个样例和注释:

# 大小写不严格区分
# cmake verson,指定cmake版本 
cmake_minimum_required(VERSION 3.0.0)

# set():用来显式的定义变量 
set(CMAKE_POSITION_INDEPENDENT_CODE ON)                 # 添加-fPIC编译,即:装成一个动态库(Linux为.so扩展文件;windows为.dll扩展文件)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wextra") # CMAKE_CXX_FLAGS:设置 C++ 编译选项。后面即为编译的添加的内容
set(CUDA_TOOLKIT_ROOT_DIR /usr/local/cuda)              # 定义cuda路径变量

# project name,指定项目的名称,一般和项目的文件夹名称对应
project(smart)
add_definitions(-std=c++11)                             # 添加支持c++11特征


# find_package(CUDA)
find_package(OpenCV REQUIRED)                           # 添加opencv依赖库

if (NOT OpenCV_FOUND)
    message(FATAL_ERROR "opencv not found")
endif (NOT OpenCV_FOUND)

set(LIBRARY_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/lib)
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${PROJECT_SOURCE_DIR}/bin)


add_subdirectory(src)                                   # 指定的文件夹加到build任务列表中

二.opencv-gpu版本的编译

2.1添加依赖库(最好更换成国内源)

# cmake安装
sudo apt-get install build-essential
sudo apt-get install libgtk2.0-dev  # 2.0以上的版本
sudo apt-get install pkg-config
sudo apt-get install python-dev python-numpy
sudo apt-get install libavformat-dev libavcodec-dev libswscale-dev libtbb2 libtbb-dev libjpeg-dev libpng12-dev libtiff5-dev libjasper-dev libdc1394-22-dev

如果在cmake的时候添加了如下选项:

-DWITH_OPENGL=ON

请添加如下依赖库:

sudo apt-get install mesa-common-dev
sudo apt-get install libgl1-mesa-dev libglu1-mesa-dev

如果在上述安装过程碰到“无法修正错误,因为您要求某些软件包保持现状,就是它们破坏了软件包间的依赖关系”问题,可以参考这里

2.2编译opencv时参数的意义

编译opencv的难点、重点就是编译时参数的选择了。不同的参数最后编译的版本就不一样。

参数说明,注意不同版本有的参数可能没有或者名字更改了(参数有很多,更多参数可看这里):

cmake \
	-D CMAKE_BUILD_TYPE=RELEASE \  # 编译opencv的版本。这里是release版本
	-D CMAKE_INSTALL_PREFIX=/usr/local \  # 为opencv安装的目录,可按实际目录进行修改,一般放在/usr/local目录下
	-D OPENCV_EXTRA_MODULES_PATH=../opencv_contrib-3.3.0/modules/ \  # 该选选项为opencv_contrib模块下module文件夹,按实际目录进行修改,若不编译opencv_contrib模块,该选项可以省略
	-D CUDA_CUDA_LIBRARY=/usr/local/cuda/lib64/stubs/libcuda.so \  # cuda的动态库文件地址
	-D CUDA_ARCH_BIN=7.5 \  # 显卡的算力
	-D CUDA_ARCH_PTX="" \   # 代表PTX代码(反正很高级的样子,具体可看:https://bbs.csdn.net/topics/390796227)
	-D WITH_CUDA=ON \  # 编译CUDA版本
	-D WITH_TBB=ON \  # 支持高性能并行的Intel tbb(AMD?)
	-D BUILD_NEW_PYTHON_SUPPORT=ON \ 支持Python 查找资料时发现有人说变成:BUILD_PYTHON_SUPPORT
	-D WITH_V4L=ON \  # 增加对V4L的支持。比如用在板子对摄像头的调用上
	-D INSTALL_C_EXAMPLES=ON \  # 安装c版本的例子(opencv3还是4已经放弃了c的维护了吧)
	-D INSTALL_PYTHON_EXAMPLES=ON \  # 安装Python版本的例子
	-D BUILD_EXAMPLES=ON \  # 安装例子
	-D WITH_QT=ON \  # 添加对qt的支持
	-D WITH_OPENGL=ON \  # 添加对opengl的支持
	-D ENABLE_FAST_MATH=1 \  # 支持math快速计算
	-D CUDA_FAST_MATH=1 \  # cuda的math快速计算
	-D WITH_CUBLAS=1 \  # 支持NVidia Cuda基本线性代数子程序(BLAS)库
	-D WITH_NVCUVID=ON \ # NVidia视频解码库支持
	-D BUILD_opencv_cudacodec=OFF ..  # cuda10已经被单独分出了,所以用off。后面两点是上一层目录的意思,不可少。

 下面是一套opencv440版本的命令:

cmake -DCMAKE_BUILD_TYPE=RELEASE \
    -DCMAKE_INSTALL_PREFIX=/usr/local \
    -DOPENCV_EXTRA_MODULES_PATH=../opencv_contrib/modules \
    -DWITH_CUDA=1 \
    -DENABLE_FAST_MATH=1 \
    -DCUDA_FAST_MATH=1 \
    -DWITH_CUBLAS=1 \
    -DOPENCV_GENERATE_PKGCONFIG=1 \
    -DCUDA_GENERATION=Pascal ..

2.3opencv编译过程

如果不想编译带上contrib和gpu的版本,可以参考如下博客:

  1. 第一篇,以第一篇为主。
  2. 第二篇。第一篇有的地方写的不是很明确可以参考第二篇。

现在要开始编译了。具体如下:

2.3.1准备opencv4.1.0和对应的contrib版本

解压两个文件,contrib文件和opencv-4.1.0同级。如下图所示:

2.3.2准备相应安装位置

终端进入opencv-4.1.0文件中,输入如下命令:

mkdir build
cd build

效果如下:

2.3.3cmake编译参数

根据自己的需求选择参数,我选择的参数如下。将它们输入刚刚打开的终端(cuda10以上-DBUILD_opencv_cudacodec=OFF一定要添加,要不然会报缺失nvcuvid.h文件的错,当然也可以去官网下载所需文件)。注意:我的添加“-DWITH_TBB=ON”选项,会出现“对‘__cxa_init_primary_exception@CXXABI_1.3.11’未定义的引用”和“对‘std::__exception_ptr::exception_ptr::exception_ptr(void*)@CXXABI_1.3.11’未定义的引用”的错误。

cmake -DCMAKE_BUILD_TYPE=RELEASE \
 -DCMAKE_INSTALL_PREFIX=/usr/local \
 -DINSTALL_PYTHON_EXAMPLES=ON \
 -DOPENCV_GENERATE_PKGCONFIG=ON \
 -DOPENCV_EXTRA_MODULES_PATH=../../opencv_contrib-4.1.0/modules \
 -DPYTHON3_EXECUTABLE=/usr/bin/python3 \
 -DPYTHON_EXECUTABLE=/usr/bin/python \
 -DWITH_V4L=ON \
 -DWITH_QT=ON \
 -DWITH_GTK=ON \
 -DWITH_OPENGL=ON \
 -DWITH_CUDA=ON \
 -DENABLE_FAST_MATH=ON \
 -DCUDA_FAST_MATH=ON \
 -DWITH_CUBLAS=ON \
 -DWITH_NVCUVID=ON \
 -DBUILD_opencv_cudacodec=OFF \
 -DBUILD_TIFF=ON ..

编译前效果如下图:

编译完成后,参数配置情况:

图一
图二
图三

2.3.4make、安装和配置环境

执行完上面的命令后,输入如下命令(注意 -j8 表示使用8线程进行make。这一步比较耗时,多则一两天,少的也快,半个小时,看CPU的性能。尽量用CPU最大性能):

make -j8

 上面的步骤有百分比进度条,可能会出现很多的错误(我碰到的错误等下整理处理),解决了错误后(没有改变cmake参数的情况),可以不从cmake开始,可以直接执行make -j8继续执行。

没有错误后进行安装,如下:

sudo make install

配置c++,输入如下命令:

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

 在打开的文件的最后一行添加如下路径:

/usr/local/lib

更新系统库:

sudo ldconfig

添加环境变量:

sudo gedit /etc/profile

 加入如下内容:

export PATH="/usr/local/lib/pkgconfig:$PATH"

刷新一下刚刚更改的文件:

sudo source /etc/profile

三.测试是否安装成功

3.1测试程序一:常规测试

在一个没有中文的路径下新建一个test_opencv文件,在该文件下新建CMakeLists.txt文件和main.cpp。注意测试的opencv的版本是4.1.0,如果其他版本可能会有稍微的差别。如下:

CMakeLists.txt

# 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 REQUIRED)

set(CMAKE_CXX_STANDARD 14)
 
# 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})

 main.cpp(早期的opencv调用gpu用的是:#include "opencv2/gpu/gpu.hpp")

using namespace std;
#include "opencv2/opencv.hpp"
#include "opencv2/core/cuda.hpp"

using namespace cv;
using namespace cv::cuda;

int main()
{
    int num_devices = cv::cuda::getCudaEnabledDeviceCount();
 
    cout<<num_devices<<endl;
}

 在test_opencv文件中打开终端,输入如下命令:

cmake .
make
./opencv_example

 如果opencv安装成功,代码编译成功:则会显示出1来(如果2块显卡就显示2),若为0表示安装不成功。我的测试结果:

3.2测试程序二:使用g++打包程序

目录如下:

 main.cpp

#include<iostream>
#include<opencv2/opencv.hpp>
using namespace cv;
using namespace std;
int main()
{
    
    Mat srcImage=imread("123.png");
    imshow("Origin",srcImage);
    waitKey(0);
    return 0;
}

 在所在文件的目录里打开终端,输入如下命令(如果不带“-DOPENCV_GENERATE_PKGCONFIG=ON”参数,下面的命令极大可能会报错):

g++ -std=c++11 main.cpp -o main `pkg-config --cflags --libs opencv4`

执行完上面的命令后会出现一个叫“mian”的斜的正方形,如下所示:

 双击该文件就会显示“123.png”这个图片,效果如下:

 3.3测试程序三:调用gpu

执行这个程序可能需要添加必要的依赖库或者其他操作,请移步这里的第五个问题,按照测试程序一的步骤执行,如果出现相同错误,可以采用博客所写方法尝试一下。

四.卸载opencv

首先要找到当初安装opencv的build目录,进入该build目录执行卸载操作(有的可能是release)。

sudo make uninstall
cd  ..
rm -rf build  # rm -rf release

如果这个目录被以前被误删了,那么需要重新建立build目录并安装对应版本,然后再执行上边卸载步骤。然后清理/usr中所有opencv相关项(注意,opencv4.0.0以后文件的名字是opencv4)。

sudo rm -rf /usr/local/include/opencv4 /usr/local/share/opencv4 /usr/local/lib/libopencv*
cd /usr
find . -name "*opencv*" | xargs sudo rm -rf

注意,如果卸载opencv后,依赖库最好是重新安装一遍(最少检查一遍)。

### 回答1: 以下是在Ubuntu 18.04上安装OpenCV 3.4.5 GPU的步骤: 1. 更新系统: sudo apt update && sudo apt upgrade 2. 安装依赖项: sudo apt install build-essential cmake git libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev libtbb2 libtbb-dev libjpeg-dev libpng-dev libtiff-dev libdc1394-22-dev libopencv-dev 3. 安装CUDA和cuDNN(如果已经安装可以跳过此步骤): 3.1 安装CUDA: sudo apt install nvidia-cuda-toolkit 3.2 安装cuDNN: 下载相应版本的cuDNN(需要注册NVIDIA账号):https://developer.nvidia.com/rdp/cudnn-download 解压文件: tar -xzvf cudnn-10.0-linux-x64-v7.3.1.20.tgz 进入文件夹: cd cuda 复制文件: sudo cp -P include/cudnn.h /usr/include sudo cp -P lib64/libcudnn* /usr/lib/x86_64-linux-gnu/ sudo chmod a+r /usr/lib/x86_64-linux-gnu/libcudnn* 4. 下载OpenCV 3.4.5源码: git clone -b 3.4.5 https://github.com/opencv/opencv.git git clone -b 3.4.5 https://github.com/opencv/opencv_contrib.git 5. 编译OpenCV: 进入OpenCV源码目录: cd opencv 创建build目录: mkdir build 进入build目录: cd build 配置编译cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local -D WITH_CUDA=ON -D CUDA_ARCH_BIN=6.1 -D CUDA_ARCH_PTX=6.1 -D OPENCV_EXTRA_MODULES_PATH=../../opencv_contrib/modules .. CUDA_ARCH_BIN和CUDA_ARCH_PTX的值根据你的显卡架构而定。可以使用以下命令确定你的架构: lspci | grep -i nvidia 例如,我的显卡架构是GeForce GTX 1080,值为6.1。 编译: make -j8 安装: sudo make install 6. 检查安装: 运行以下命令检查OpenCV是否正确安装: pkg-config --modversion opencv 如果输出版本号,说明安装成功。 至此,在Ubuntu 18.04上安装OpenCV 3.4.5 GPU完成。 ### 回答2: 安装OpenCV 3.4.5 GPU版本的步骤如下: 1. 安装NVIDIA驱动程序:首先,需要安装适合您的图形处理器的NVIDIA驱动程序。您可以从NVIDIA官方网站上下载并安装最新的驱动程序。确保您选择与您的GPUUbuntu 18.04版本相匹配的驱动程序。 2. 安装CUDA:CUDA是用于利用GPU计算能力的平台和编程模型。同样,您需要选择与您的GPUUbuntu 18.04版本相匹配的CUDA版本。您可以从NVIDIA官方网站上下载并安装CUDA。 3. 安装cuDNN:cuDNN是一个NVIDIA深度神经网络库,它提供了加速神经网络训练和推理的功能。您需要选择与您的CUDA版本相匹配的cuDNN版本,并从NVIDIA官方网站上下载并安装它。 4. 安装OpenCV依赖项:在编译安装OpenCV之前,您需要安装一些必要的依赖项。打开终端并运行以下命令: ```bash sudo apt-get update sudo apt-get install build-essential cmake git pkg-config libgtk-3-dev \ libjpeg-dev libpng-dev libtiff-dev libavcodec-dev libavformat-dev \ libswscale-dev libv4l-dev libxvidcore-dev libx264-dev libatlas-base-dev \ gfortran libcanberra-gtk3-module ``` 5. 克隆OpenCV存储库:使用以下命令克隆OpenCV存储库: ```bash cd ~ git clone https://github.com/opencv/opencv.git ``` 6. 切换到OpenCV 3.4.5版本:默认情况下,您可能会得到OpenCV的最新版本。使用以下命令切换到3.4.5版本: ```bash cd opencv git checkout 3.4.5 ``` 7. 创建一个构建目录并切换到该目录: ```bash mkdir build cd build ``` 8. 使用CMake配置OpenCV构建选项: ```bash cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local \ -D INSTALL_C_EXAMPLES=OFF -D INSTALL_PYTHON_EXAMPLES=OFF \ -D WITH_CUDA=ON -D CUDA_ARCH_BIN=<Your_CUDA_ARCH_BIN> -D CUDA_ARCH_PTX=<Your_CUDA_ARCH_PTX> \ -D OPENCV_EXTRA_MODULES_PATH=../opencv_contrib/modules .. ``` 根据您的具体需求,您可能需要根据OpenGL版本设置WITH_OPENGL参数,或根据您的OpenCV构建路径设置OPENCV_EXTRA_MODULES_PATH参数。 9. 编译安装OpenCV: ```bash make -j$(nproc) sudo make install sudo ldconfig ``` 10. 测试OpenCV设置是否成功:编写一个简单的OpenCV程序并进行编译和执行,以测试OpenCV安装是否成功。 希望这些步骤能帮助您成功安装OpenCV 3.4.5 GPU版本。记得根据您的硬件和系统版本进行相应的选择和配置。 ### 回答3: 首先,在Ubuntu 18.04上安装OpenCV 3.4.5 GPU版本需要确保你已经正确安装了CUDA和cuDNN,并且你的显卡支持CUDA。 以下是在Ubuntu 18.04上安装OpenCV 3.4.5 GPU版本的步骤: 1. 安装CUDA和cuDNN:访问NVIDIA官方网站,下载并安装与你的显卡型号和Ubuntu版本相匹配的CUDA和cuDNN版本。 2. 确认CUDA和cuDNN安装成功:在终端输入以下命令来检查CUDA是否正确安装: ```bash nvcc -V ``` 如果正确安装,你将看到CUDA的版本信息。 3. 安装依赖项:在终端中运行以下命令来安装必要的依赖项: ```bash sudo apt-get update sudo apt-get install build-essential cmake git libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev ``` 4. 下载OpenCV源代码:在终端输入以下命令来下载OpenCV 3.4.5的源代码: ```bash cd ~ git clone https://github.com/opencv/opencv.git cd opencv git checkout 3.4.5 ``` 5. 编译安装OpenCV:在终端中依次运行以下命令来编译安装OpenCV: ```bash cd ~ mkdir opencv_build cd opencv_build cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local .. make -j8 sudo make install ``` 6. 安装OpenCVGPU模块:在终端中,进入OpenCV源代码的目录,然后执行以下命令: ```bash cd ~/opencv_contrib/modules git clone https://github.com/opencv/opencv_contrib.git cd ~/opencv_build cmake -DOPENCV_EXTRA_MODULES_PATH=~/opencv_contrib/modules .. make -j8 sudo make install ``` 7. 配置环境变量:打开终端配置文件 `~/.bashrc`,并在文件末尾添加以下内容: ```bash export LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH ``` 保存文件并运行以下命令来应用配置更改: ```bash source ~/.bashrc ``` 这样,你就已经成功在Ubuntu 18.04上安装OpenCV 3.4.5 GPU版本。你可以使用以下命令验证安装是否成功: ```bash pkg-config --modversion opencv ``` 如果OpenCV版本信息显示为3.4.5,并且你的显卡支持CUDA,那么你已经成功安装OpenCV 3.4.5 GPU版本
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值