ubuntu18编译opencv4.1.1——为了使用opencv的cuda加速

2023-10-19 22:20

本文主要是介绍ubuntu18编译opencv4.1.1——为了使用opencv的cuda加速,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

网上教程挺多的的,我也是参考网上教程编译成功的,现在把我编译的过程发出来。
目的:使用opencv中的cuda加速函数。例如:

frame1_gray = cv.cuda_GpuMat(image1)
frame2_gray = cv.cuda_GpuMat(image2)
opticalFlowGPU = cv.cuda_FarnebackOpticalFlow.create(3,0.5,False,9,3,5,1.2,0)
flow = opticalFlowGPU.calc(frame1_gray, frame2_gray, None)
flow = flow.download()

还有其他函数:python中GPU版本的opencv常用方法介绍

opencv编译的参考文章
在Ubuntu 16.04 LTS下编译安装OpenCV 4.1.1
Ubuntu18.04 源码编译OpenCV4.1.1

1.安装环境依赖,环境依赖很重要,我一开始一直没成功,就是因为环境依赖没安装好。
参考第一篇文章的环境依赖:

sudo apt-get install build-essential# OpenCV官网中安装的是旧版本的libgtk2.0-dev,这里我们安装新版本的libgtk-3-dev
sudo apt-get install git libgtk-3-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev# OpenCV官网中安装2.7版本的python-dev和python-numpy,这里我们安装python 3版本的python3-dev和python3-numpy
sudo apt-get install python3-dev python3-numpy libtbb2 libtbb-dev libjpeg-dev libpng-dev libtiff-dev libjasper-dev libdc1394-22-dev

这个也可能不够全面,可以多看几篇文章,把需要的依赖都安装好。

2.下载源码
在这里插入图片描述

3.cmake配置
配置的时候需要联网下载一些包,这个可以自己先下载好,改下载路径。opencv在ubuntu下安装ippcv无法加载问题
在这里插入图片描述

我一开始是从cmake的gui界面配置,按照第一篇文章的选择做的。
在他基础上加上了WITH_CUDA,因为我要用cuda加速。但是编译出来,没有cv2.cpython-36m-x86_64-linux-gnu.so这个文件。(在我一开始编译时也没有这个文件,那个时候是因为缺少python3-dev这个依赖)昨天又用第一篇文章的方法编译还是没有这个文件。这次我用命令行cmake。

cmake -D CMAKE_BUILD_TYPE=RELEASE \-D CMAKE_INSTALL_PREFIX=/home/hyx/local/opencv4 \-D OPENCV_EXTRA_MODULES_PATH=../../opencv_contrib-4.1.1/modules \-D OPENCV_GENERATE_PKGCONFIG=ON \-D PYTHON3_LIBRARY=/usr/local/anaconda3/lib/libpython3.6m.so \-D PYTHON3_INCLUDE_DIR=/usr/local/anaconda3/include/python3.6m \-D PYTHON3_EXECUTABLE=/usr/local/anaconda3/bin/python \-D PYTHON3_PACKAGES_PATH=/usr/local/anaconda3/lib/python3.6/site-packages \-D BUILD_opencv_python2=OFF \-D BUILD_opencv_python3=ON \-D INSTALL_PYTHON_EXAMPLES=OFF\-D INSTALL_C_EXAMPLES=OFF \-D OPENCV_ENABLE_NONFREE=ON \-D BUILD_EXAMPLES=ON \-D WITH_CUDA=ON ..

注意修改要用到的python环境
CMAKE_INSTALL_PREFIX我用的不是默认的/usr/local/,而是我自己的路径,这个看个人需求。我这样改是为了编译错误,方便删除。

4.编译

make -j8
sudo make install

如果不是管理员,在第二步之前su到root,进行make install

这样,编译之后,可以看到cv2.cpython-36m-x86_64-linux-gnu.so
如果编译结束之后没报错,但是lib里面没有python3这个文件夹,那就不算成功。
在这里插入图片描述
5.因为是在服务器上编译的,服务器本身就有opencv-python。
所有我现在cv2.cpython-36m-x86_64-linux-gnu.so文件夹下运行python。用来验证opencv版本。
在这里插入图片描述
因为我之前编译成功之后,每次验证都是python安装的opencv-python版本,后来在这个文件夹下就成功。可能需要软连接或者把这个so文件移到python的环境文件夹里面,但是因为我这是服务器,很多人在用,所以我就每次需要用到cuda加速的时候,把这个路径添加到sys.path。
在这里插入图片描述
我把这个文件夹和CMAKE_INSTALL_PREFIX=/home/hyx/local/opencv4文件夹放在公用文件夹里面,其他用户也可以使用。(改/.bashrc文件我试过了,还是会用到opencv-python版本)

在这里插入图片描述
在这里插入图片描述

这篇关于ubuntu18编译opencv4.1.1——为了使用opencv的cuda加速的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!


原文地址:https://blog.csdn.net/qq_38469784/article/details/109022488
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.chinasem.cn/article/242727

相关文章

使用Go调用第三方API的方法详解

《使用Go调用第三方API的方法详解》在现代应用开发中,调用第三方API是非常常见的场景,比如获取天气预报、翻译文本、发送短信等,Go作为一门高效并发的编程语言,拥有强大的标准库和丰富的第三方库,可以... 目录引言一、准备工作二、案例1:调用天气查询 API1. 注册并获取 API Key2. 代码实现3

MySQL8.0临时表空间的使用及解读

《MySQL8.0临时表空间的使用及解读》MySQL8.0+引入会话级(temp_N.ibt)和全局(ibtmp1)InnoDB临时表空间,用于存储临时数据及事务日志,自动创建与回收,重启释放,管理高... 目录一、核心概念:为什么需要“临时表空间”?二、InnoDB 临时表空间的两种类型1. 会话级临时表

MySQL之复合查询使用及说明

《MySQL之复合查询使用及说明》文章讲解了SQL复合查询中emp、dept、salgrade三张表的使用,涵盖多表连接、自连接、子查询(单行/多行/多列)及合并查询(UNION/UNIONALL)等... 目录复合查询基本查询回顾多表查询笛卡尔积自连接子查询单行子查询多行子查询多列子查询在from子句中使

Kotlin 协程之Channel的概念和基本使用详解

《Kotlin协程之Channel的概念和基本使用详解》文章介绍协程在复杂场景中使用Channel进行数据传递与控制,涵盖创建参数、缓冲策略、操作方式及异常处理,适用于持续数据流、多协程协作等,需注... 目录前言launch / async 适合的场景Channel 的概念和基本使用概念Channel 的

C#使用SendMessage实现进程间通信的示例代码

《C#使用SendMessage实现进程间通信的示例代码》在软件开发中,进程间通信(IPC)是关键技术之一,C#通过调用WindowsAPI的SendMessage函数实现这一功能,本文将通过实例介绍... 目录第一章:SendMessage的底层原理揭秘第二章:构建跨进程通信桥梁2.1 定义通信协议2.2

使用python制作一款文件粉碎工具

《使用python制作一款文件粉碎工具》这篇文章主要为大家详细介绍了如何使用python制作一款文件粉碎工具,能够有效粉碎密码文件和机密Excel表格等,感兴趣的小伙伴可以了解一下... 文件粉碎工具:适用于粉碎密码文件和机密的escel表格等等,主要作用就是防止 别人用数据恢复大师把你刚删除的机密的文件恢

MySQL使用EXISTS检查记录是否存在的详细过程

《MySQL使用EXISTS检查记录是否存在的详细过程》EXISTS是SQL中用于检查子查询是否返回至少一条记录的运算符,它通常用于测试是否存在满足特定条件的记录,从而在主查询中进行相应操作,本文给大... 目录基本语法示例数据库和表结构1. 使用 EXISTS 在 SELECT 语句中2. 使用 EXIS

在Android中使用WebView在线查看PDF文件的方法示例

《在Android中使用WebView在线查看PDF文件的方法示例》在Android应用开发中,有时我们需要在客户端展示PDF文件,以便用户可以阅读或交互,:本文主要介绍在Android中使用We... 目录简介:1. WebView组件介绍2. 在androidManifest.XML中添加Interne

Java Stream流与使用操作指南

《JavaStream流与使用操作指南》Stream不是数据结构,而是一种高级的数据处理工具,允许你以声明式的方式处理数据集合,类似于SQL语句操作数据库,本文给大家介绍JavaStream流与使用... 目录一、什么是stream流二、创建stream流1.单列集合创建stream流2.双列集合创建str

Python使用FastAPI实现大文件分片上传与断点续传功能

《Python使用FastAPI实现大文件分片上传与断点续传功能》大文件直传常遇到超时、网络抖动失败、失败后只能重传的问题,分片上传+断点续传可以把大文件拆成若干小块逐个上传,并在中断后从已完成分片继... 目录一、接口设计二、服务端实现(FastAPI)2.1 运行环境2.2 目录结构建议2.3 serv