opencv3.x与opencl

Posted 斯人摆渡

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了opencv3.x与opencl相关的知识,希望对你有一定的参考价值。

opencl(全称Open Computing Language)是一个面向异构系统通用的并行编程标准,用于GPU加速。opencv2中存在ocl模块对其有一定的支持,但用法较复杂,而更新到opencv3后,ocl模块消失,取而代之的是T-API(Transparent API)。

T-API是统一接口的API调用方式,增加了一个新的容器UMat对其进行支持。最大的特点是不需要复杂的初始化过程,且函数接口与CPU的函数接口相同。如下图所示。

图1 UMat例程


Mat与UMat相互转换

主要有两种转换方式。第一种使用copyTo函数(推荐)。如图2所示。UMat转Mat使用方法相同。

图2 copyTo例程


第二种方法,使用UMat::getMat(flag)和Mat::getUMat(flag)。flag可以是ACCESS_READ, ACCESS_WRITE, ACCESS_RW 和 ACCESS_FAST。但是没有文档说明,只能从字面上猜测。如图3所示,在取得UMat对象后,作为父对象Mat也会被LOCK直到子对象UMat销毁(release函数释放)之后才可以继续使用。这种方式目前在使用时出现了一些莫名的Bug,所以在详细文档出来前,暂不推荐。

图3 getUMat例程


以上是关于opencv3.x与opencl的主要内容,如果未能解决你的问题,请参考以下文章

OpenCV3.x视频教程出来啦!

OpenCV3 新特性 - 图像无缝克隆函数演示

OpenCV 3.2正式发布啦

opencvJava实现的opencv3.x版本后Highhui报错

Ubuntu安装opencv3.x系列

Android Studio配置和使用OpenCV3.x,不需要OpencvManager