OpenCV的Transparent API

文章作者:Tyan
博客:noahsnail.com  |  CSDN  |  简书

1. Transparent API

OpenCV 3中的Transparent API就是OpenCV 2中的OCL模块,从OpenCV 3开始,已经没有OCL模块,取而代之的是Transparent API。Transparent API主要是用来提升性能的。

2. Usage

  • 普通的Mat写法:
#include "opencv2/opencv.hpp"
using namespace cv;

int main(int argc, char** argv)
{
    Mat img, gray;
    img = imread("image.jpg", 1);

    cvtColor(img, gray, COLOR_BGR2GRAY);
    GaussianBlur(gray, gray,Size(7, 7), 1.5);
    Canny(gray, gray, 0, 50);

    imshow("edges", gray);
    waitKey();
    return 0;
}
  • Transparent API写法(UMat)
#include "opencv2/opencv.hpp"
using namespace cv;

int main(int argc, char** argv)
{
    UMat img, gray;
    imread("image.jpg", 1).copyTo(img);

    cvtColor(img, gray, COLOR_BGR2GRAY);
    GaussianBlur(gray, gray,Size(7, 7), 1.5);
    Canny(gray, gray, 0, 50);

    imshow("edges", gray);
    waitKey();
    return 0;
}

其实主要是将Mat变为UMat,其它的不变。Mat变为UMat有两种方式,一种是copyTo,一种是getUMat

# copyTo
UMat img;
imread("image.jpg", 1).copyTo(img);

# getUMat
Mat mat = imread("image.jpg", IMREAD_COLOR); 
// Get umat from mat. 
UMat umat = mat.getUMat(flag);

flag下选项有ACCESS_READ,ACCESS_WRITE,ACCESS_RW,ACCESS_FAST

3. How to accelerate?

Transparent API主要是使用了OpenCL来进行加速,下面是OpenCL的介绍。

OpenCL(Open Computing Language,开放计算语言)是一个为异构平台编写程序的框架,此异构平台可由CPU、GPU、DSP、FPGA或其他类型的处理器与硬件加速器所组成。OpenCL由一门用于编写kernels(在OpenCL设备上运行的函数)的语言(基于C99)和一组用于定义并控制平台的API组成。OpenCL提供了基于任务分区和数据分区的并行计算机制。

参考资料

  1. http://www.learnopencv.com/opencv-transparent-api/

  2. https://zh.wikipedia.org/wiki/OpenCL

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值