C++版本的OpenCV 5.x编译生成opencv-python==5.x(GPU版本)接口并进行调用

news/2024/5/18 16:01:01/文章来源:https://blog.csdn.net/weixin_41194129/article/details/126650822

实现文章连接:强力推荐】基于Nvidia-Docker-Linux(Ubuntu18.04)平台:新版OpenCV5.x(C++)联合CUDA11.1(GPU)完美配置视觉算法开发环境

目录

  • 1、关于有粉丝私信问我怎么调用的问题
  • 2、opencv5.x(GPU)测试成功
    • opencv-python==5.x测试代码
    • OpenCV(c++)==5.x测试代码
  • 参考

1、关于有粉丝私信问我怎么调用的问题

这里再说明一下,具体方法如下:

  • 文中我已经说得清处了,如果你之前在环境中已安装opencv-python的其他版本,那么文中提到的/usr/lib/python3/dist-packages主要是当前正在使用的cv2.so动态库存在的地方;如果你没有安装这里则不会出现,我之前按装国,所以会有,因此选择软连接的方式可以成功导入opencv5.x的版本。
    在这里插入图片描述
  • 路径/usr/lib/python3.6/site-packages/cv2/python-3.6/cv2.cpython-36m-x86_64-linux-gnu.so主要是你编译opencv生成的动态库(这个路径主要三与你一开始制定的有关),因此可以从这里软连接或复制到刚刚1提到的路径下面就可以了。
cp  /usr/lib/python3.6/site-packages/cv2/python-3.6/cv2.cpython-36m-x86_64-linux-gnu.so  /usr/lib/python3/dist-packages

要么复制要么软连接,如果还是不行就使用这条命令全局搜索find / -name cv2*.so,其中cv2.cpython-36m-x86_64-linux-gnu.soo才是你生成的,用这个就行。

  • 如果上述方法都试过了,解决的方法就是卸载已经安装的opencv版本,直接调用,例如,我的是这样的:
    卸载:
pip uninstall opencv-contrib-python
pip unstall opencv-python

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

2、opencv5.x(GPU)测试成功

在这里插入图片描述

下面示例测试:

opencv-python==5.x测试代码

import sys
import time
import cv2
print(cv2.__version__)### VALUES
NUM_REPEAT = 10000### Read source image
img_src = cv2.imread(
"../datasets/VOCdevkit/VOCmask2/JPEGImages/mask0011.jpg")  # 输入你的图片
cv2.imshow('img_src', img_src)### Run with CPU
time_start = time.time()
for i in range (NUM_REPEAT):img_dst = cv2.resize(img_src, (300, 300))
time_end = time.time()
print ("CPU = {0}".format((time_end - time_start) * 1000 / NUM_REPEAT) + "[msec]")
cv2.imshow('CPU', img_dst)### Run with GPU
img_gpu_src = cv2.cuda_GpuMat() # Allocate device memory only once, as memory allocation seems to take time...
img_gpu_dst = cv2.cuda_GpuMat()
time_start = time.time()
for i in range (NUM_REPEAT):img_gpu_src.upload(img_src)img_gpu_dst = cv2.cuda.resize(img_gpu_src, (300, 300))img_dst = img_gpu_dst.download()
time_end = time.time()
print ("GPU = {0}".format((time_end - time_start) * 1000 / NUM_REPEAT) + "[msec]")
cv2.imshow('GPU', img_dst)key = cv2.waitKey(0)
cv2.destroyAllWindows()print(cv2.cuda.getCudaEnabledDeviceCount())

输出结果:

5.0.0-pre
CPU = 0.37868216037750246[msec]
GPU = 0.28145129680633546[msec]

在这里插入图片描述

由于只是简单的操作一张图片,所以从运行速度上没有多大变化,当经过一些复杂像素计算就能体现GPU的优点了。

OpenCV(c++)==5.x测试代码

cv2cuda.cc:

#include <stdio.h>
#include <chrono>
#include <opencv2/opencv.hpp>
// #include <opencv2/gpu/gpu.hpp>
#include <opencv2/core/cuda.hpp>
#include <opencv2/cudawarping.hpp>#define NUM_REPEAT 10000int main()
{cv::Mat imgSrc = cv::imread("mask0026.jpg");cv::imshow("imgSrc", imgSrc);{cv::Mat imgDst;const auto& t0 = std::chrono::steady_clock::now();for (int i = 0; i < NUM_REPEAT; i++) cv::resize(imgSrc, imgDst, cv::Size(300, 300));const auto& t1 = std::chrono::steady_clock::now();std::chrono::duration<double> timeSpan = t1 - t0;printf("CPU = %.3lf [msec]\n", timeSpan.count() * 1000.0 / NUM_REPEAT);cv::imshow("CPU", imgDst);}{cv::cuda::GpuMat imgGpuSrc, imgGpuDst;cv::Mat imgDst;const auto& t0 = std::chrono::steady_clock::now();for (int i = 0; i < NUM_REPEAT; i++) {imgGpuSrc.upload(imgSrc);cv::cuda::resize(imgGpuSrc, imgGpuDst, cv::Size(300, 300));imgGpuDst.download(imgDst);}const auto& t1 = std::chrono::steady_clock::now();std::chrono::duration<double> timeSpan = t1 - t0;printf("GPU = %.3lf [msec]\n", timeSpan.count() * 1000.0 / NUM_REPEAT);cv::imshow("GPU", imgDst);}cv::waitKey(0);return 0;
}

CMakeLists.txt:

# cmake needs this line
cmake_minimum_required(VERSION 3.1)# Define project name
project(opencv_example_project)# 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(cv2cuda cv2cuda.cc)# Link your application with OpenCV libraries
target_link_libraries(cv2cuda PRIVATE ${OpenCV_LIBS})

编译方法:

rm -rf build
mkdir build
cd build
cmake ..
make
./cv2cuda

输出结果:

bash run.sh 
-- The C compiler identification is GNU 7.5.0
-- The CXX compiler identification is GNU 7.5.0
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working C compiler: /usr/bin/cc - skipped
-- Detecting C compile features
-- Detecting C compile features - done
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Check for working CXX compiler: /usr/bin/c++ - skipped
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Performing Test CMAKE_HAVE_LIBC_PTHREAD
-- Performing Test CMAKE_HAVE_LIBC_PTHREAD - Failed
-- Looking for pthread_create in pthreads
-- Looking for pthread_create in pthreads - not found
-- Looking for pthread_create in pthread
-- Looking for pthread_create in pthread - found
-- Found Threads: TRUE  
-- Found CUDA: /usr/local/cuda (found suitable exact version "11.1") 
-- Found OpenCV: /usr (found version "5.0.0") 
-- OpenCV library status:
--     config: /usr/lib/x86_64-linux-gnu/cmake/opencv5
--     version: 5.0.0
--     libraries: opencv_3d;opencv_calib;opencv_core;opencv_dnn;opencv_features2d;opencv_flann;opencv_highgui;opencv_imgcodecs;opencv_imgproc;opencv_ml;opencv_objdetect;opencv_photo;opencv_stereo;opencv_stitching;opencv_video;opencv_videoio;opencv_alphamat;opencv_aruco;opencv_barcode;opencv_bgsegm;opencv_bioinspired;opencv_ccalib;opencv_cudaarithm;opencv_cudabgsegm;opencv_cudacodec;opencv_cudafeatures2d;opencv_cudafilters;opencv_cudaimgproc;opencv_cudalegacy;opencv_cudaobjdetect;opencv_cudaoptflow;opencv_cudastereo;opencv_cudawarping;opencv_cudev;opencv_datasets;opencv_dnn_objdetect;opencv_dnn_superres;opencv_dpm;opencv_face;opencv_freetype;opencv_fuzzy;opencv_hfs;opencv_img_hash;opencv_intensity_transform;opencv_line_descriptor;opencv_mcc;opencv_optflow;opencv_phase_unwrapping;opencv_plot;opencv_quality;opencv_rapid;opencv_reg;opencv_rgbd;opencv_saliency;opencv_shape;opencv_structured_light;opencv_superres;opencv_surface_matching;opencv_text;opencv_tracking;opencv_videostab;opencv_wechat_qrcode;opencv_xfeatures2d;opencv_ximgproc;opencv_xobjdetect;opencv_xphoto;opencv_xstereo
--     include path: /usr/include/opencv5
-- Configuring done
-- Generating done
-- Build files have been written to: /demo_cv/build
[ 50%] Building CXX object CMakeFiles/cv2cuda.dir/cv2cuda.cc.o
[100%] Linking CXX executable cv2cuda
[100%] Built target cv2cuda
CPU = 0.388 [msec]
GPU = 0.345 [msec]

在这里插入图片描述

参考

强力推荐】基于Nvidia-Docker-Linux(Ubuntu18.04)平台:新版OpenCV5.x(C++)联合CUDA11.1(GPU)完美配置视觉算法开发环境

AI模型C++部署:【配置OpenCV4++环境】与【三种在 C++ 中部署 TensorFlow 模型的方式】【准备阶段】

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_4386.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

黑马C++ 02 核心6 —— 类和对象_继承(重难点)

文章目录1.1 继承基本语法普通实现(重复率高)继承实现(减少重复代码)1.2 继承方式公共继承保护继承私有继承1.3 继承中的对象模型1.4 继承中构造与析构顺序1.5 继承同名成员处理方法同名成员属性同名成员函数1.6 继承同名静态成员处理方式1.6.1 同名静态成员属性通过对象访问通…

第9章 Spring的数据库编程

目录/Contents第9章 Spring的数据库编程学习目标学习内容1 Spring JDBC1.1 JDBCTemplate概述1.1.1 JDBCTemplate作用1.1.2 抽象类JdbcAccessor的属性1.2 Spring JDBC的配置1.2.1 Spring JDBC中的4个包说明1.2.2 dataSource配置4个属性的含义1.2.3 dataSource属性值的设定要求2 …

【中秋怎么过】许一个愿,希望成都不要在静默管理中过中秋

今年的中秋又要到啦&#xff0c;诚邀亲爱的博主参与投稿&#xff0c;分享“程序员”视角下的中秋夜之美&#xff01; 内容可以是&#xff1a; 程序员过中秋的正确方式&#xff1a;团圆、赏月、还是惨兮兮地加班&#xff1f;互联网大厂的中秋仪式感&#xff1a;壕无人性&#…

嵌入式Linux入门-Linux文件IO讲解并实现copy程序

嵌入式Linux入门学习教程汇总&#xff1a;嵌入式Linux教程—裸机、应用、驱动完整教程目录 在Linux系统中&#xff0c;一切都是“文件”&#xff1a;普通文件、驱动程序、网络通信等等。所有的操作&#xff0c;都是通过“文件IO”来操作的。 IO就是input和output&#xff0c;…

[PostgreSQL的 SPI_接口函数]

Server Programming Interface&#xff08;SPI&#xff09;是PostgreSQL内核中的一个模块&#xff0c;这个模块让内核开发者可以在C函数中执行SQL语句&#xff0c;并具备管理事务的能力。通过它我们可以用C语言去调用数据库里的各种SQL。 这个SPI_比较便利的一点在于&#xff…

如何使用 Bootstrap 处理 CSS

如何使用 Bootstrap 处理 CSS 大家好!如果您像我一样开始使用 CSS 编码并使用它进行任何大型项目,那么您肯定会因为响应式布局、溢出和选择器特异性而感到数不清的头痛。这就是几周前我决定学习 Bootstrap 的原因,这里是它的文档和主要功能的简短描述,所以你也可以。引导程…

一、Azkaban简明笔记

1、azkaban部署 主要是集群部署安装。 1.1 准备安装包Downloads (azkaban.github.io)1.2 配置MySQL启动mysql mysql -uroot -proot创建azkaban数据库 create database azkaban;创建azkaban用户并赋予权限(可以不设置账号,继续使用root账号) -- 显示相关变量 SHOW VARIABLES …

实体店主最爱的中秋活动方案,直接照搬就能轻松爆单!

中秋将至&#xff0c;传统佳节和营销好时机一起到了&#xff01;利用氛围浓厚的节日进行营销活动&#xff0c;是吸引客户、增粉卖货的最佳手段之一&#xff0c;商户老板们可千万不能错过&#xff01; 但是&#xff0c;活动人人都能做&#xff0c;如何在一片节日促销中脱颖而出&…

JVM详解

1. 源文件 源文件就是我们编写Java代码的文件。文件扩展名为.java 2. 字节码文件 字节码文件是源文件编译后的文件。字节码文件是二进制文件&#xff0c;需要通过特定的工具才能查看。里面存放了源文件编译后的字节码指令。 3. 类加载器 Class Loader Java 程序运行时会由…

USB转GPIO应用方案

概述 沁恒提供的多款USB转接系列芯片均提供GPIO引脚功能&#xff0c;各引脚支持独立的输出输入&#xff0c;GPIO功能的使用需要与计算机端厂商驱动程序和应用软件配合使用。各芯片的默认GPIO引脚状态有所区别&#xff0c;可查阅芯片技术手册或参考方案中附表。 型号 CH344Q …

基于神经网络的图像识别,人工神经网络图像识别

如何通过人工神经网络实现图像识别 。 人工神经网络&#xff08;ArtificialNeuralNetworks&#xff09;&#xff08;简称ANN&#xff09;系统从20世纪40年代末诞生至今仅短短半个多世纪&#xff0c;但由于他具有信息的分布存储、并行处理以及自学习能力等优点&#xff0c;已经…

Jmeter(五) - 从入门到精通 - 测试计划(Test Plan)的元件(详解教程)

一.测试计划&#xff08;Test Plan&#xff09;要素 1.JMeter中一个脚本就是一个测试计划&#xff08;Test Plan&#xff09;&#xff0c;也是一个管理单元。JMeter 的请求模拟与并发数(设置线程数&#xff0c;一个线程代表一个虚拟用户)设置都在脚本文件中一起设置。JMeter 不…

雨夜赶长路,房企必经的三场“价值战事”

今年上半年&#xff0c;地产行业一直在高压下运行。市场周期震荡叠加疫情等因素&#xff0c;为房企的销售、土拍、融资带来不确定性。 下半年以来&#xff0c;虽然不确定性和高压仍在&#xff0c;但市场有望恢复&#xff0c;下行趋势似乎已到拐点。 面对高压&#xff0c;不同…

安装 ZooKeeper 并配置服务

官网 访问官方下载页面安装 # 注意替换一下新的链接 curl -sSLO https://dlcdn.apache.org/zookeeper/zookeeper-3.8.0/apache-zookeeper-3.8.0-bin.tar.gz tar -zxvf apache-zookeeper-3.8.0-bin.tar.gz -C /opt/ cd /opt ln -s zookeeper-3.4.10 ./zookeepercd zookeeper m…

微服务项目:尚融宝(8)(后端接口:积分等级CRUD)

认清现实&#xff0c;放弃幻想&#xff0c;准备斗争 一、积分等级列表接口 1、编写积分等级管理接口 在controller中添加admin包&#xff0c;添加AdminIntegralGradeController类CrossOrigin RestController RequestMapping("/admin/core/integralGrade") public cl…

Mac中无法运行旧版本印象笔记:版本太旧 你的本地印象笔记数据是由新版印象笔记管理

&#x1f4e2;&#x1f4e2;&#x1f4e2;&#x1f4e3;&#x1f4e3;&#x1f4e3; 哈喽&#xff01;大家好&#xff0c;我是「奇点」&#xff0c;江湖人称 singularity。刚工作几年&#xff0c;想和大家一同进步&#x1f91d;&#x1f91d; 一位上进心十足的【Java ToB端大厂…

算法设计与分析作业——递归循环

用循环实现&#xff1a; 1、 求级数 求&#xff1a;1/1!-1/3!1/5!-1/7!…(-1)n1/(2n-1)! #include <bits/stdc.h> using namespace std; int main( ) {int i,n,j,sign1; float s,t1; cin>>n; s1; for(i2;i<n;ii1){t1; /*求阶乘*/for(j1;j<2*i-1;…

(11)工业界推荐系统-小红书推荐场景及内部实践【粗排三塔模型】

&#xff08;1&#xff09;工业界推荐系统-小红书推荐场景及内部实践【业务指标、链路、ItemCF】 &#xff08;2&#xff09;工业界推荐系统-小红书推荐场景及内部实践【UserCF、离线特征处理】 &#xff08;3&#xff09;工业界推荐系统-小红书推荐场景及内部实践【矩阵补充、…

推荐10款好用的数据可视化工具,赶紧收藏

写在前面的话&#xff1a;没有十全十美的工具&#xff0c;但是如果确立&#xff08;可视化&#xff09;目标&#xff0c;就能找到合适的工具去实现。 数据分析过程可以分为&#xff1a;确定目标数据、数据采集、数据清洗、数据存储、数据分析、结果可视化及结果支持和决策等步骤…

文字转音频软件哪个好用?这几个方法你值得拥有

不知道你有没有发现一个现象&#xff0c;现在越来越多的人会把自己制作好的视频发布到各个社交平台上&#xff0c;分享自己的日常。有的人还会用自己的声音来做配音旁白&#xff0c;而有的人因为自己声音和视频不搭&#xff0c;会使用配音软件&#xff0c;把文字转换成语音。可…