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的主要内容,如果未能解决你的问题,请参考以下文章