OpenCV CUDA简介

文章概述

·处理单个图像

·处理一系列图像

·对一系列图像使用Dask进行并行延时处理

处理单个图像

首先,我们需要创建GPU空间(GPU_frame)来保存图像(就像相框保存图片一样),然后才能将图像上传到GPU。

第1步:上传

import cv2 as cvgpu_frame = cv.cuda_GpuMat()

下一步,用CPU将图像加载到内存中(截图),并将其.upload到gpu上(帧图像);

screenshot = cv.imread('media/drop.png')gpu_frame.upload(screenshot)

我们可以开始了。

第2步:开始玩图像

OpenCV CUDA函数返回cv2.cuda_GpuMat(GPU矩阵),因此每个结果都可以在用户不必重新upload的情况下操作。

让我们把图像从RGB转换成BGR(OpenCV格式),然后调整大小:

screenshot = cv.cuda.cvtColor(gpu_frame, cv.COLOR_RGB2BGR)screenshot = cv.cuda.resize(screenshot, (400, 400))

注意:你调用的函数的第一个参数应该是GPU矩阵(GPU帧),而不是你刚刚上传的图像。这将返回一个新的GPU矩阵。

原始的GPU矩阵(gpu_frame)将继续保存原始图像,直到新图像被upload。

第3步:下载

现在你可能会想:“图像呢?”

它被存放在GPU上了,我们需要把它下载回CPU:

screenshot.download()

注意:download()将从cv转换为图像,从cuda_GpuMat到numpy.ndarray。

处理一系列图像

要处理新图片,只需用upload()将新图片加载到现有的GPU矩阵中。图像在传递给GPU之前同样须加载到CPU上。

import cv2 as cvimg_files = ['bear.png', 'drip.png', 'tldr.png', 'frog.png']# 创建帧来保存图片(cv2.cuda_GpuMat)gpu_frame = cv.cuda_GpuMat()for i in range(len(img_files)): # 加载图像(CPU) screenshot = cv.imread(f'media/{img_files[i]}') # 上传到GPU gpu_frame.upload(screenshot) # 转换颜色到opencv (numpy) ndarray→cv2.cuda_GpuMat screenshot = cv.cuda.cvtColor(gpu_frame, cv.COLOR_RGB2BGR) # 反向阈值@ 100 screenshot = cv.cuda.threshold(screenshot, 105, 255, cv.THRESH_BINARY_INV) # 调整图像 screenshot = cv.cuda.resize(screenshot[1], (200, 200)) # 从GPU下载图像(cv2) cuda_GpuMat→numpy.ndarray screenshot = screenshot.download()

这一次我们在预处理中添加了一个反向的binary.threshold()。

对一系列图像使用Dask进行并行延时处理

使用Dask延时后,我们可以将上面的循环推入Dask延时函数,并行预处理多个系列的图像。

import cv2 as cvimport dask.delayed@dask.delayeddef preprocess(files): # 复制图像文件 i_files = files.copy() # 创建GPU帧来保存图像 gpu_frame = cv.cuda_GpuMat() for i in range(len(i_files)): # 加载图像(CPU) screenshot = cv.imread(f'media/{i_files[i]}') # 上传到GPU gpu_frame.upload(screenshot) # 转换颜色到opencv (numpy) ndarray→cv2.cuda_GpuMat screenshot = cv.cuda.cvtColor(gpu_frame, cv.COLOR_RGB2BGR) screenshot = cv.cuda.cvtColor(screenshot, cv.COLOR_BGR2GRAY) # 反向阈值@ 100 screenshot = cv.cuda.threshold(screenshot, 125, 255, cv.THRESH_BINARY) # 调整图像 screenshot = cv.cuda.resize(screenshot[1], (200, 200)) # 从GPU下载图像 (cv2.cuda_GpuMat -> numpy.ndarray) screenshot = screenshot.download() # 用新图像 i_files[i] = screenshot # 输出预处理图像 return i_files

我还添加了第二个cvtColor()来灰度化图像,并将反转的二进制阈值切换为二进制阈值。

我们现在可以使用compute();

from dask import computeimg_files = ['bear.png', 'drip.png', 'tldr.png', 'frog.png']img_files_2 = ['apple.png', 'eye.png', 'window.png', 'blinds.png']# 设置延迟set_a = dask.delayed(preprocess)(img_files)set_b = dask.delayed(preprocess)(img_files_2)# 开始计算out_a, out_b = compute(*[set_a, set_b])

结果如下:

结尾

谢谢你的阅读。Github链接:https://github.com/Dropout-Analytics/opencv_cuda。

(0)

相关推荐

  • 利用ADB截取创维盒子高清图!

    当你使用超清盒子看到一个浪漫的场景,想要分享给朋友,拿手机拍照?模糊不清,马赛克一堆,再浪漫的场景也会顿时失去兴趣:单反拍?满屏幕的摩尔纹也让这浪漫的场景大打折扣.        截屏操作很简单,需要 ...

  • 开源3D创作软件Blender支持光追加速:另外还整合了个Intel的图像降噪库

    Blender是一套免费开源的3D创作软件,在里面可以创作包括有静态图片与3D动画在内的多种3D视觉内容,软件使用了一种名为Cycles的渲染器,它基于CPU或者GPU进行计算,并且支持光线追踪算法, ...

  • Windows下基于VS2019|Opencv4.2.0|CUDA10.0|YOLOv4

    一.安装VS2019 由于我只需要用到C++相关功能,所以只勾选了C++那个选项,右侧[安装详细信息]那栏中默认就好了,安装路径可以修改,默认安装在C盘. 如果以后有其他需求需要安装其他的,可以之打开 ...

  • 简要概述三维重建3Dreconstruction技术

    三维重建的英文术语名称是3D Reconstruction. 三维重建是指对三维物体建立适合计算机表示和处理的数学模型,是在计算机环境下对其进行处理.操作和分析其性质的基础,也是在计算机中建立表达客观 ...

  • windows下安装配置cudn和cudnn

    (一)GPU新驱动安装 查看自己电脑的显卡信息,可以使用工具CPU-Z检测.下图为本机的显卡信息: 编辑 显卡信息查看.png 进入NVIDIA驱动下载进行符合条件的下载安装.直接安装并取代之前的显卡 ...

  • HALCON 20.11:深度学习笔记(1)

    HALCON 20.11.0.0中,实现了以下深度学习方法: 1. Anomaly Detection(异常检测) 给每个像素分配显示未知特征的可能性.更多信息请参见深度学习/异常检测一章. 异常检测 ...

  • colab测试一下有没有使用GPU

    表白:黑白圣堂血天使,天剑鬼刀阿修罗.  讲解对象:/colab测试一下有没有使用GPU  作者:融水公子 rsgz Colab教程 Colab教程 http://www.rsgz.top/post/ ...

  • Ubuntu 20.04 + opencv 4 + cuda 11 + opengl 详细配置流程

    Ubuntu 20.04 + opencv 4 + contrib + opengl 详细配置流程1.下载opencv源码https://opencv.org/releases/,找到相应的版本,下载 ...

  • OpenCV的Rect矩形类简介和使用

    OpenCV的Rect矩形类用法 摘自 https://blog.csdn.net/kh1445291129/article/details/51149849 //如果创建一个Rect对象rect(1 ...

  • 在 Google Colab 中使用 OpenCV 进行图像处理简介

    重磅干货,第一时间送达 在这篇文章中,我们将实现如何使用 OpenCV 在 google colaboratory 中进行图像处理.为此,我们应该了解一些 Python 基础知识,下面给出的步骤将帮助 ...

  • Windows安装 配置Yolov3(vs2019 NVIDIA CUDA cuDNN OPENCV...

    在安装配置YOLO时候,真是坑一大堆,对我这样的小白来说,真的是不友好.现在记录下安装过程. 由于过去快一个月了,所以只能记录大概步骤. 此文章是参考各大教程集合而成,仅作记录. 参考文章: http ...

  • Py之cv2:cv2库(OpenCV,opencv-python)的简介、安装、使用方法(常见函数、方法等)最强详细攻略

    Py之cv2:cv2库(OpenCV,opencv-python)的简介.安装.使用方法(常见函数.方法等)最强详细攻略 相关文章: Py之cv2:cv2库(OpenCV)的简介.安装.使用方法(常见 ...

  • 我这里整理了一个关于中药剂量的一个常识的简介,分享给各位朋友。

    关于度量:秦始皇统一六国,统一度量衡,但是通过中医的学习会发现度量衡还是很混乱,半斤八两,那么一两是多少呢?还有论钱论厘的,有的说一小勺,有的说一小杯,有的说一小碗,你怎么弄?我这里整理了一个关于中药 ...

  • 趋势丨蔗糖理想替代品——阿洛酮糖简介

    导语 作为蔗糖的理想替代品,阿洛酮糖是什么?有何特点? 文:中国食品报网丨欣文 图:Stockfood 我们曾分享过一篇关于甜味剂的解读文章,对甜味剂的优点及工业应用进行了介绍,指出世界范围内无糖和低 ...

  • 李默飞个人简介

    易学是我国劳动人民智慧的结晶,是一门古老的学科,自古就充满了无限的神秘,一直是人们不断探索和研究的学科.古往今来有无数名人都在易学上有突出成就,如谷鬼子.诸葛亮.袁天罡等名人.近当代更是涌现出数不胜数 ...

  • 冉龙清老师个人简介

    国际易学联盟副主席 四川易经协会名誉会长 中华易经风水学院常务院长 中国易经协会会员 四川周易研究院副院长 本人于五十年代中期出生于寺庙林立的大巴山中麓,其间多有大贤隐士深隐于此.上小学初中适逢&qu ...