OpenCV之OpenCL介绍

17 篇文章 0 订阅
3 篇文章 0 订阅

人工智能研究网

欢迎访问 www.studyai.cn
这里写图片描述

啥是OpenCL

OpenCL(全称Open Computing Language,开放运算语言)是第一个面向异构系统通用目的并行编程的开放式、免费标准,也是一个统一的编程环境,便于软件开发人员为高性能计算服务器、桌面计算系统、手持设备编写高效轻便的代码,而且广泛适用于多核心处理器(CPU)、图形处理器(GPU)、Cell类型架构以及数字信号处理器(DSP)等其他并行处理器,在游戏、娱乐、科研、医疗等各种领域都有广阔的发展前景。计算机视觉中的许多算法可以运行在GPU比CPU更有效:如图像处理,矩阵运算,计算摄影、目标检测等。

OpenCV使用OpenCL的历史

OpenCV中使用OpenCL进行加速的历史是从 2011 年开始的. Opencv 2.4.3的发行版中包含了一个新的“ocl module”, 这个模块包含了一些现有的OpenCV算法的OpenCL实现。这意味着, 当OpenCL运行时环境以及一个兼容的计算设备比如GPU或DSP在你的计算机上存在且可用的时候, 你可以使用 cv::ocl::resize() 而不是 cv::resize() 来加速你的代码. 从2011年开始的这几年里,越来越多的函数被添加到ocl模块,但是在OpenCV2.4.x中ocl模块的API与原始的CPU-oriented API是分离并存的.

OpenCV3.x中的架构已经改为 Transparent API (T-API).在新的架构中分离存在的ocl module 已经被移除了,ocl函数成为与原始的CPU函数一模一样的调用借口。当条件成熟时,OpenCV会自动调用ocl的对应函数分支,不需要像OpenCV2.4.x那样显式的指定。 The T-API implementation was sponsored by AMD and Intel companies.

性能测试

这里写图片描述

代码范例

  • 一般CPU代码

         // initialization
        VideoCapture vcap(...);
        CascadeClassifier fd("haar_ff.xml");
        Mat frame, frameGray;
        vector faces;
        for(;;){
          // processing loop
          vcap >> frame;
          cvtColor(frame, frameGray, BGR2GRAY);
          equalizeHist(frameGray, frameGray);
          fd.detectMultiScale(frameGray, faces, ...);
          // draw rectangles …
          // show image …
        }
  • OpenCV-2.x中的OpenCL代码

             // initialization
            VideoCapture vcap(...);
            ocl::OclCascadeClassifier fd("haar_ff.xml");
            ocl::oclMat frame, frameGray;
            Mat frameCpu;
            vector faces;
            for(;;){
              // processing loop
              vcap >> frameCpu;
              frame = frameCpu;
              ocl::cvtColor(frame, frameGray, BGR2GRAY);
              ocl::equalizeHist(frameGray, frameGray);
              fd.detectMultiScale(frameGray, faces, ...);
              // draw rectangles …
              // show image …
            }
  • OpenCV-3.x中的OpenCL代码段
    // initialization
    VideoCapture vcap(...);
    CascadeClassifier fd("haar_ff.xml");
    UMat frame, frameGray;
    vector faces;
    for(;;){
      // processing loop
      vcap >> frame;
      cvtColor(frame, frameGray, BGR2GRAY);
      equalizeHist(frameGray, frameGray);
      fd.detectMultiScale(frameGray, faces, ...);
      // draw rectangles …
      // show image …
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值