python opencv gpu加速_让Python下的OpenCV也能GPU加速!part.1

20200411更新:

经过评论区 @鹤汀凫渚 的指导,我成功的用最简单的方法在python中调用到了GPU加速后的函数,这里把这位朋友的评论贴出来供各位参考:

以下原文:

本文的核心目的就是加速,在实时图像处理的路上,没有什么比得上加速,速度足够快就能上更复杂的模型,速度足够快就能有更多的预处理,总之,加速就是一切。

为了弥补Opencv-Python接口没有cuda加速的缺陷,本文旨在通过调用C++上才有的cuda模块,对Opencv进行加速,然后将其打包为Python接口后调用。

ps:本来笔者最开始采用的是Cython的第三方解决方案,但是经过同事指教后发现官方的API更加明晰,故改回使用Python官方的API来完成。

目录:图像数组的跨平台传递。

在C++下编写cuda加速的OpenCV代码。

--------------------------------------------------------------------------------

图像数组的跨平台传递

在采用PyTorch或者TF等深度学习框架的项目中,OpenCV主要的工作是针对图像的预处理,因此绝大部分情况下,数据的IO都是通过Python进行的,如何将图像数据从Python跨平台传输到C++下就是我们首先要解决的问题,而在Python下的图像数据基本都是保存为ndarray类型,因此我们需要在C++下也同样引入Numpy库,这个库可以通过APT直接安装,头文件会与Python3的头文件放在一起。

本文主要涉及的C++第三方库包括:OpenCV

Numpy

Python3.6

代码逻辑为:接收来自Python的ndarray数组,将其转为PyArrayObject类

将PyArrayObject转为OpenCV的Mat类数据

调用OpenCV对Mat进行图像处理,本文为了演示仅做BGR2GRAY处理

将处理后的Mat转换为PyArrayObject类

将PyArrayObject传回给Python,Python会自动将其识别为ndarray类对象

为了完成上面的逻辑,我们需要新建三个类文件:interface.cpp/.h :接口类,主要负责步骤1,5

conversion.cpp/.h :转换类,主要负责步骤2,4

process.cpp/.h :处理类,主要负责步骤3

先从interface.cpp文件开始:

//interface.cpp// Created by liuky on 2020-01-02.//#include #include "numpy/arrayobject.h"#include "numpy/ndarrayobject.h"#include "opencv2/imgcodecs.hpp"#include "conversion.h

  • 0
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值