测试 opencv-python 中的 mat 和 Umat 处理图像的差异(GPU加速)

简介: 测试 opencv-python 中的 mat 和 Umat 处理图像的差异(GPU加速)

前言


  近期探讨到了使用GPU加速Opencv处理图像的过程,相必大家在日常处理非深度学习任务图像数据的过程中使用的绝大多数是CPU进行处理的数据,例如对图像进行灰度化、添加噪声、滤波等操作。这里我们采用实验数据比较mat和Umat的特点说明Umat的优势




实验


实验准备


PC端配置:CPU:11400F - i5 GPU: GTX1660ti


常见图像像素尺寸例举:


img0.shape = 237 x 250 x 3


img1.shape = 512 x 384 x 3   (标清)


img2.shape = 640 x 352 x 3   (DVD)


img3.shape = 640 x 480 x 3  (数字电视RTSP)


img4.shape = 800 x 480 x 3  (数字电视RTSP)


img5.shape = 1024x 534 x 3  (数字电视RTSP)


img6.shape = 1280x 720 x 3  (直播)


img7.shape = 1280x 960 x 3  (工业相机)


img8.shape = 1920x 1080 x 3 (监控相机)



实验步骤


图像处理步骤:


  1. 读取图像


  1. 图像灰度话


  1. 添加高斯噪声


  1. Canny边缘检测




统计方式:


  计算循环100次的处理FPS均值,通过比较处理不同像素大小的图像进而比较在何时使用 mat 何时使用 Umat



处理结果:


512x384:


GPU: 302.8824480662899


CPU: 304.31073670160845



640X480


GPU: 204.14862846096017


CPU: 207.01862159693542


1024X543


GPU: 117.21923353899794


CPU: 131.77444173577712


1280X960


GPU: 61.402272955890474


CPU: 64.44232134963245


1920X1080


GPU: 31.742890957261825


CPU: 30.31974624205707




总结:


  mat2Umat的过程中也会耗费一定的时间,如果在工程应用中处理的是小尺寸图像&Opencv的计算量不大的情况下建议使用mat格式数据进行操作即可(这样避免了 mat2Umat过程的时间损耗);如果处理的是大尺寸图像并且需要大量使用opencv内置函数进行处理数据的话,大家可以使用mat2Umat进行转换数据到GPU上去进行 提速运算




demo


import cv2
import time
FpsList = []
for i in range(100):
    t1 = time.time()
    img = cv2.UMat(cv2.imread("512384.jpg", cv2.IMREAD_COLOR))
    # img = cv2.imread("512384.jpg", cv2.IMREAD_COLOR)
    gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
    gray = cv2.GaussianBlur(gray, (7, 7), 1.5)
    gray = cv2.Canny(gray, 0, 50)
    t2 = time.time()
    FPS = 1 / (t2 - t1)
    FpsList.append(FPS)
    cv2.putText(img, "FPS= %.2f" % FPS, (0, 40), cv2.FONT_HERSHEY_SIMPLEX, 1, (0, 0, 255), 2)
    cv2.imshow("edges", img)
    cv2.waitKey(1)
print(sum(FpsList) / len(FpsList))




相关实践学习
在云上部署ChatGLM2-6B大模型(GPU版)
ChatGLM2-6B是由智谱AI及清华KEG实验室于2023年6月发布的中英双语对话开源大模型。通过本实验,可以学习如何配置AIGC开发环境,如何部署ChatGLM2-6B大模型。
相关文章
|
7月前
|
机器学习/深度学习 人工智能 并行计算
AI部署架构:A100、H100、A800、H800、H20的差异以及如何选型?开发、测试、生产环境如何进行AI大模型部署架构?
AI部署架构:A100、H100、A800、H800、H20的差异以及如何选型?开发、测试、生产环境如何进行AI大模型部署架构?
AI部署架构:A100、H100、A800、H800、H20的差异以及如何选型?开发、测试、生产环境如何进行AI大模型部署架构?
|
6月前
|
人工智能 并行计算 开发者
CUDA重大更新:原生Python可直接编写高性能GPU程序
NVIDIA在2025年GTC大会上宣布CUDA并行计算平台正式支持原生Python编程,消除了Python开发者进入GPU加速领域的技术壁垒。这一突破通过重新设计CUDA开发模型,引入CUDA Core、cuPyNumeric、NVMath Python等核心组件,实现了Python与GPU加速的深度集成。开发者可直接用Python语法进行高性能并行计算,显著降低门槛,扩展CUDA生态,推动人工智能、科学计算等领域创新。此更新标志着CUDA向更包容的语言生态系统转型,未来还将支持Rust、Julia等语言。
463 3
CUDA重大更新:原生Python可直接编写高性能GPU程序
|
9月前
|
算法 数据安全/隐私保护 计算机视觉
基于FPGA的图像双线性插值算法verilog实现,包括tb测试文件和MATLAB辅助验证
本项目展示了256×256图像通过双线性插值放大至512×512的效果,无水印展示。使用Matlab 2022a和Vivado 2019.2开发,提供完整代码及详细中文注释、操作视频。核心程序实现图像缩放,并在Matlab中验证效果。双线性插值算法通过FPGA高效实现图像缩放,确保质量。
|
安全 Linux 网络安全
Kali 渗透测试:基于结构化异常处理的渗透-使用Python编写渗透模块(一)
Kali 渗透测试:基于结构化异常处理的渗透-使用Python编写渗透模块(一)
266 2
|
Python Windows 网络安全
Kali 渗透测试:基于结构化异常处理的渗透-使用Python编写渗透模块(二)
Kali 渗透测试:基于结构化异常处理的渗透-使用Python编写渗透模块(二)
225 2
|
8月前
|
机器学习/深度学习 人工智能 算法
基于Python深度学习的【害虫识别】系统~卷积神经网络+TensorFlow+图像识别+人工智能
害虫识别系统,本系统使用Python作为主要开发语言,基于TensorFlow搭建卷积神经网络算法,并收集了12种常见的害虫种类数据集【"蚂蚁(ants)", "蜜蜂(bees)", "甲虫(beetle)", "毛虫(catterpillar)", "蚯蚓(earthworms)", "蜚蠊(earwig)", "蚱蜢(grasshopper)", "飞蛾(moth)", "鼻涕虫(slug)", "蜗牛(snail)", "黄蜂(wasp)", "象鼻虫(weevil)"】 再使用通过搭建的算法模型对数据集进行训练得到一个识别精度较高的模型,然后保存为为本地h5格式文件。最后使用Djan
472 1
基于Python深度学习的【害虫识别】系统~卷积神经网络+TensorFlow+图像识别+人工智能
|
9月前
|
机器学习/深度学习 人工智能 算法
基于Python深度学习的【蘑菇识别】系统~卷积神经网络+TensorFlow+图像识别+人工智能
蘑菇识别系统,本系统使用Python作为主要开发语言,基于TensorFlow搭建卷积神经网络算法,并收集了9种常见的蘑菇种类数据集【"香菇(Agaricus)", "毒鹅膏菌(Amanita)", "牛肝菌(Boletus)", "网状菌(Cortinarius)", "毒镰孢(Entoloma)", "湿孢菌(Hygrocybe)", "乳菇(Lactarius)", "红菇(Russula)", "松茸(Suillus)"】 再使用通过搭建的算法模型对数据集进行训练得到一个识别精度较高的模型,然后保存为为本地h5格式文件。最后使用Django框架搭建了一个Web网页平台可视化操作界面,
903 11
基于Python深度学习的【蘑菇识别】系统~卷积神经网络+TensorFlow+图像识别+人工智能
|
机器学习/深度学习 编解码 监控
目标检测实战(六): 使用YOLOv8完成对图像的目标检测任务(从数据准备到训练测试部署的完整流程)
这篇文章详细介绍了如何使用YOLOv8进行目标检测任务,包括环境搭建、数据准备、模型训练、验证测试以及模型转换等完整流程。
20483 59
目标检测实战(六): 使用YOLOv8完成对图像的目标检测任务(从数据准备到训练测试部署的完整流程)
|
11月前
|
机器学习/深度学习 人工智能 算法
【宠物识别系统】Python+卷积神经网络算法+深度学习+人工智能+TensorFlow+图像识别
宠物识别系统,本系统使用Python作为主要开发语言,基于TensorFlow搭建卷积神经网络算法,并收集了37种常见的猫狗宠物种类数据集【'阿比西尼亚猫(Abyssinian)', '孟加拉猫(Bengal)', '暹罗猫(Birman)', '孟买猫(Bombay)', '英国短毛猫(British Shorthair)', '埃及猫(Egyptian Mau)', '缅因猫(Maine Coon)', '波斯猫(Persian)', '布偶猫(Ragdoll)', '俄罗斯蓝猫(Russian Blue)', '暹罗猫(Siamese)', '斯芬克斯猫(Sphynx)', '美国斗牛犬
549 29
【宠物识别系统】Python+卷积神经网络算法+深度学习+人工智能+TensorFlow+图像识别
|
11月前
|
敏捷开发 测试技术 持续交付
自动化测试之美:从零开始搭建你的Python测试框架
在软件开发的马拉松赛道上,自动化测试是那个能让你保持节奏、避免跌宕起伏的神奇小助手。本文将带你走进自动化测试的世界,用Python这把钥匙,解锁高效、可靠的测试框架之门。你将学会如何步步为营,构建属于自己的测试庇护所,让代码质量成为晨跑时清新的空气,而不是雾霾中的忧虑。让我们一起摆脱手动测试的繁琐枷锁,拥抱自动化带来的自由吧!

推荐镜像

更多