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

相关文章

Java Thread中join方法使用举例详解

《JavaThread中join方法使用举例详解》JavaThread中join()方法主要是让调用改方法的thread完成run方法里面的东西后,在执行join()方法后面的代码,这篇文章主要介绍... 目录前言1.join()方法的定义和作用2.join()方法的三个重载版本3.join()方法的工作原

Spring AI使用tool Calling和MCP的示例详解

《SpringAI使用toolCalling和MCP的示例详解》SpringAI1.0.0.M6引入ToolCalling与MCP协议,提升AI与工具交互的扩展性与标准化,支持信息检索、行动执行等... 目录深入探索 Spring AI聊天接口示例Function CallingMCPSTDIOSSE结束语

Linux系统之lvcreate命令使用解读

《Linux系统之lvcreate命令使用解读》lvcreate是LVM中创建逻辑卷的核心命令,支持线性、条带化、RAID、镜像、快照、瘦池和缓存池等多种类型,实现灵活存储资源管理,需注意空间分配、R... 目录lvcreate命令详解一、命令概述二、语法格式三、核心功能四、选项详解五、使用示例1. 创建逻

OpenCV在Java中的完整集成指南分享

《OpenCV在Java中的完整集成指南分享》本文详解了在Java中集成OpenCV的方法,涵盖jar包导入、dll配置、JNI路径设置及跨平台兼容性处理,提供了图像处理、特征检测、实时视频分析等应用... 目录1. OpenCV简介与应用领域1.1 OpenCV的诞生与发展1.2 OpenCV的应用领域2

在Java中使用OpenCV实践

《在Java中使用OpenCV实践》用户分享了在Java项目中集成OpenCV4.10.0的实践经验,涵盖库简介、Windows安装、依赖配置及灰度图测试,强调其在图像处理领域的多功能性,并计划后续探... 目录前言一 、OpenCV1.简介2.下载与安装3.目录说明二、在Java项目中使用三 、测试1.测

C++中detach的作用、使用场景及注意事项

《C++中detach的作用、使用场景及注意事项》关于C++中的detach,它主要涉及多线程编程中的线程管理,理解detach的作用、使用场景以及注意事项,对于写出高效、安全的多线程程序至关重要,下... 目录一、什么是join()?它的作用是什么?类比一下:二、join()的作用总结三、join()怎么

mybatis中resultMap的association及collectio的使用详解

《mybatis中resultMap的association及collectio的使用详解》MyBatis的resultMap定义数据库结果到Java对象的映射规则,包含id、type等属性,子元素需... 目录1.reusltmap的说明2.association的使用3.collection的使用4.总

Go语言编译环境设置教程

《Go语言编译环境设置教程》Go语言支持高并发(goroutine)、自动垃圾回收,编译为跨平台二进制文件,云原生兼容且社区活跃,开发便捷,内置测试与vet工具辅助检测错误,依赖模块化管理,提升开发效... 目录Go语言优势下载 Go  配置编译环境配置 GOPROXYIDE 设置(VS Code)一些基本

Spring Boot配置和使用两个数据源的实现步骤

《SpringBoot配置和使用两个数据源的实现步骤》本文详解SpringBoot配置双数据源方法,包含配置文件设置、Bean创建、事务管理器配置及@Qualifier注解使用,强调主数据源标记、代... 目录Spring Boot配置和使用两个数据源技术背景实现步骤1. 配置数据源信息2. 创建数据源Be

Java中使用 @Builder 注解的简单示例

《Java中使用@Builder注解的简单示例》@Builder简化构建但存在复杂性,需配合其他注解,导致可变性、抽象类型处理难题,链式编程非最佳实践,适合长期对象,避免与@Data混用,改用@G... 目录一、案例二、不足之处大多数同学使用 @Builder 无非就是为了链式编程,然而 @Builder