简介

OpenCV是计算机视觉领域应用非常广泛的工具库。而OpenCV Contrib库是第三方非官方开发的扩充库,这个库可以使用一些特殊算法,如物体跟踪。和英伟达的CUDA配合,OpenCV可以更加高效。

运行环境

  • 操作系统为Ubuntu16.04,但是原则上适用于所有类似发行版甚至大多数Linux系统。
  • CUDA需要事先安装,通过nvcc -V查看是否安装。
  • CUDNN需要和CUDA版本配合安装,通过cat /usr/local/cuda/include/cudnn_version.h | grep CUDNN_MAJOR -A 2查看是否安装,旧版本将cudnn_version.h换为cudnn.h

安装

依赖安装

sudo apt-get update
sudo apt-get install build-essential cmake unzip pkg-config libjpeg-dev libpng-dev libtiff-dev libavcodec-dev libavformat-dev libswscale-dev libv4l-dev libxvidcore-dev libx264-dev libgtk-3-dev libatlas-base-dev gfortran
sudo apt-get install python3-dev

源码下载

通过下面的命令下载OpenCv和OpenCV Contrib的源码,并切换到指定版本(可选,由于我这里是CUDA11,所以为了兼容安装了一个较高的版本4.4.0)。

git clone https://github.com/opencv/opencv/
# 非最新版本使用下面的命令切换版本
cd opencv
git checkout 4.4.0git clone https://github.com/opencv/opencv_contrib.git
# 非最新版本使用下面的命令切换版本
cd opencv_contrib
git checkout 4.4.0

源码编译安装

当前目录下有opencvopencv_contrib两个文件夹。

cd opencv
mkdir build
cd build

接下里我们使用cmake进行源码编译,但是需要指定GPU的计算能力,具体请查看官网,部分如下图。


我们使用下面的命令进行编译(使用的3090计算力为8.6),注意更改自己的安装目录、opencv_contrib目录的路径。

cmake -D CMAKE_BUILD_TYPE=RELEASE \-D CMAKE_INSTALL_PREFIX=~/opt/opencv \-D INSTALL_PYTHON_EXAMPLES=OFF \-D INSTALL_C_EXAMPLES=OFF \-D OPENCV_ENABLE_NONFREE=ON \-D WITH_CUDA=ON \-D WITH_CUDNN=ON \-D OPENCV_DNN_CUDA=ON \-D ENABLE_FAST_MATH=1 \-D CUDA_FAST_MATH=1 \-D CUDA_ARCH_BIN=8.6 \-D WITH_CUBLAS=1 \-D OPENCV_EXTRA_MODULES_PATH=~/Downloads/opencv_src/opencv_contrib/modules \-D OPENCV_GENERATE_PKGCONFIG=YES \-D BUILD_EXAMPLES=ON ..

如果需要安装Pyhon支持,则加入下面两个选项。

-D HAVE_opencv_python3=ON \
-D PYTHON_EXECUTABLE=~/.virtualenvs/opencv_cuda/bin/python \

当然,如果你只需要安装最简版本的OpenCV,不需要安装OpenCV Contrib,也不需要CUDA支持,那么请使用下面的命令。

cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=~/opt/opencv -D BUILD_EXAMPLES=ON -D OPENCV_GENERATE_PKGCONFIG=YES ..

不过,配置过程大概率会出现如下的问题,请先按照步骤解决。

这个cmake过程中可能会有出现xfeatures2d模块缺失boostdesc_bgm.i文件下载超时问题,也可能遇到ippicv_2019_lnx_intel64_general_20180723.tgz无法下载的问题,这些都是因为网络限制无法下载文件导致的,因此我们可以新建一个目录来存放我们预先下载好的这些文件,因此我们现在有如下三个目录,分别为opencvopencv_contribopencv_need,前面二者为源码,后者为存放离线文件的目录。

.
├── opencv
├── opencv_contrib
└── opencv_need

其中,opencv_need需要如下文件。这里为了方便大家的处理,我已经将该目录打包并上传到CSDN的资源托管了,可以访问链接下载。

.
├── boostdesc_bgm_bi.i
├── boostdesc_bgm_hd.i
├── boostdesc_bgm.i
├── boostdesc_binboost_064.i
├── boostdesc_binboost_128.i
├── boostdesc_binboost_256.i
├── boostdesc_lbgm.i
├── face_landmark_model.dat
├── ippicv_2019_lnx_intel64_general_20180723.tgz
├── vgg_generated_120.i
├── vgg_generated_48.i
├── vgg_generated_64.i
└── vgg_generated_80.i

然后,我们需要修改几个配置文件,我这里以上面所述的三个文件夹所在目录为出发点,展示这三个文件路径。将其中https://地址修改为opencv_need的路径,我这里具体为file:///home/xxx/Downloads/opencv_src/opencv_need/

opencv/3rdparty/ippicv/ippicv.cmake
opencv_contrib/modules/xfeatures2d/cmake/download_boostdesc.cmake
opencv_contrib/modules/xfeatures2d/cmake/download_vgg.cmake
opencv_contrib/modules/face/CMakeLists.txt

此时,重新进行上面的cmake命令编译应该可以直接通过,我们使用make install来安装OpenCV。

必要配置

此时,如果没有报错,我们将下面的语句写入~/.bashrc文件中来添加环境变量,便于库的定位。加入前两条语句后,pkg-config定位OpenCV,而加入第三条语句后,能在CMakeLists.txt中直接通过FIND_PACKAGE(OpenCV REQUIRED)命令找到OpenCV。

export PKG_CONFIG_PATH=~/opt/opencv/lib/pkgconfig
export LD_LIBRARY_PATH=~/opt/opencv/lib
export OpenCV_DIR=~/opt/opencv/

注意更新后要通过source ~/.bashrc重新激活环境变量,然后使用下面的命令确认OpenCV版本,安装正确的话该命令会输出版本号。

pkg-config --modversion opencv4

测试安装

请构建如下一个目录,用于代码测试,其中demo.jpg随便找一个测试图片即可。

.
├── CMakeLists.txt
├── demo.jpg
└── main.cpp

main.cpp内容如下。

#include <opencv2/opencv.hpp>
#include <iostream>using namespace cv;
using namespace std;int main(int argc, char** argv)
{//读取照片Mat image = imread("demo.jpg");//检测失误if (image.empty()){cout << "Could not open or find the image" << endl;cin.get(); //等待键盘输入return -1;}string windowName = "OpenCV Test";        //窗口名称namedWindow(windowName);                  //创建新窗口imshow(windowName, image);                //使用新窗口显示照片waitKey(0);                               //等待键盘输入destroyWindow(windowName);                //关闭所有窗口return 0;
}

CMakeLists.txt内容如下。

# cmake needs this line
cmake_minimum_required(VERSION 3.1)# Enable C++11
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED TRUE)# Define project name
project(main)# 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)# 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 "    config: ${OpenCV_DIR}")
message(STATUS "    version: ${OpenCV_VERSION}")
message(STATUS "    libraries: ${OpenCV_LIBS}")
message(STATUS "    include path: ${OpenCV_INCLUDE_DIRS}")# Declare the executable target built from your sources
add_executable(main main.cpp)# Link your application with OpenCV libraries
target_link_libraries(main LINK_PRIVATE ${OpenCV_LIBS})

然后顺次执行下面的命令,成功显示图像则安装测试成功。

cmake .
make
./main

总结

本文介绍了如何在自己的家目录中安装OpenCV,如果OpenCV Contrib和CUDA支持安装有问题,建议按照最简版本先安装使用,很多场景其实只需要最简版本即可。

OpenCV源码安装教程(兼容CUDA)相关推荐

  1. tx2+opencv源码编译教程(tx2+opencv4.4.0+opencv_contrib-4.4.0)

    tx2+opencv源码编译教程(tx2+opencv4.4.0+opencv_contrib-4.4.0) 一.卸载TX2上已安装的opencv 打开终端,输入以下指令卸载已经安装的opencv: ...

  2. ansible1.7.2源码安装教程

    ansible1.7.2源码安装教程 ================================================================================= ...

  3. mysql data文件夹恢复_【专注】Zabbix源码安装教程—步骤详解(2)安装并配置mysql...

    四.安装并配置mysql(1) 解压mysql-5.7.26.tar.gz与boost_1_59_0.tar.gz #tar -xvf mysql-5.7.26.tar.gz #tar -xvf bo ...

  4. php+mysql案例含源码_【专注】Zabbix源码安装教程—步骤详解(1)安装前准备

    一.实验环境准备 Rhel 7.6 x86_64(server) 192.168.163.72 Rhel 6.5 x86_64(agent) 192.168.163.61 均已配置操作安装光盘为YUM ...

  5. 最详细新版网课联盟27刷网课平台源码+安装教程+最新模板+下载地址

    新版网课联盟27刷网课平台源码+安装教程+最新模板 第一步:准备一个服务器+域名 没有域名暂时使用服务器网址也可以 第二步:上传文件 上传文件到wwwroot上面,进行解压 第三步:进行防伪静态设置: ...

  6. php网站源码安装教程

    php网站源码安装教程 1.可以选择购买一个支持php的空间,空间的大小要足够大于你要在空间上传的源码文件,另外空间的速度一定要快,否则会影响到你用户的体验度,好的空间最好速度能达到100兆,这样体验 ...

  7. 微云二手车运营版 公众号+小程序v1.1.20+微信小程序+抖音端源码安装教程

    系统包括PC+公众号+小程序v1.1.20+微信小程序+抖音小程序前端,使用前先在后台初始化下数据.播播资源网技术小编看了下说明是带PC端功能,但后台没找到设置的地方,不过公众号+小程序+抖音也够用了 ...

  8. 最新二开抢单系统淘宝自动抢单源码安装教程

    最新二开抢单系统淘宝自动抢单源码安装教程 [2次开发版]2020最新五代分佣抢单系统唯品会京东淘宝自动抢单区块源码 新增理财宝收益分佣功能 五代分佣 新增用户提现手续费 2020年02月04日升级 新 ...

  9. windows+vscode+opencv源码安装配置

    一.参考资料 VScode搭建OpenCV环境 OpenCV使用CMake和MinGW-w64的编译安装 win10下VSCode配置opencv4.4.0(超详细教程,亲测有效) VSCODE中配置 ...

最新文章

  1. Kettle数据采集 部署安装
  2. 如何实现蓝牙空中升级BLE OTA
  3. 远程连接linux(Ubuntu配置SSH服务)22端口
  4. postgresql对于HashJoin算法的Data skew优化与MCV处理
  5. 【Python】pandas模块操作大型数据集
  6. c语言指针查找数组一个数_C语言快速入门——指针与数组
  7. 6分钟速配 电商平台百万并发云压测实战
  8. 接口测试工具-Jmeter使用笔记(四:响应断言)
  9. 【元胞自动机】基于matlab保守策略元胞自动机三车道(开放辅路,软件园影响)交通流模型【含Matlab源码 1295期】
  10. CAPL编程语言简介
  11. 有限元工程应用方法-ANSYS单元刚度矩阵计算理论详解
  12. cadcene17.4软件汉化
  13. 【无人机 学习笔记 2】无人机导航制导与控制
  14. KEIL MDK 查看代码量、RAM使用情况--Code、RO-data、RW-data、ZI-data的解释
  15. TCS34725颜色感应识别模块
  16. Flashnbsp;AS3nbsp;学习9nbsp;-nbsp;时钟的制作
  17. 年底到了,消费者纷纷抢购,特斯拉成为汽车市场的超级网红
  18. php获取目录下所有文件路径(递归)
  19. 导入项目后R.id.lv 报错!求大神解答
  20. 《人月神话》纪念典藏版撤下了以前的宣传语

热门文章

  1. Zookeeper基于Java 访问-权限控制的案例演示
  2. 执行SQL-MapperMethod.execute()
  3. Properties和IO流相结合的方法
  4. 体验Lambda表达式【理解】
  5. jwt:介绍以及创建token
  6. 脚手架工程:工程目录结构
  7. 入门案例中使用的组件介绍
  8. 两种获取Stream流的方式
  9. 常见问题_空指针异常
  10. [坑] IDEA Unable to import maven project 解决办法