0
点赞
收藏
分享

微信扫一扫

OpenCV算法加速(5)官方G-API怎么使用?

芭芭蘑菇 2022-02-01 阅读 177

1、G-API是什么?能干什么? 

G-API 是OpenCV针对图像处理算法流程开发的目标是以构建图为方法,增加不同后端进行计算优化,以使图像处理任务更加轻量级和快速的新框架。比如整体考虑GPU上的算法流程、系统减少优化显存访问,可有效提高计算速度。

2、笔者使用的是opencv v4.5.5版本源码,

https://github.com/opencv/opencv/tree/4.5.5/modules/gapi

写了一个demo来测试,CPU 4核,8线程,内存8GB:

#include <iostream>
#include <opencv2/core.hpp>
#include <opencv2/gapi.hpp>
#include <opencv2/gapi/core.hpp>
#include <opencv2/gapi/imgproc.hpp>
#include <opencv2/highgui.hpp>
#include <opencv2/imgcodecs.hpp>
#include <opencv2/imgproc.hpp>

void normal()
{
    cv::Mat srcImage = cv::imread("D:\\allike\\Image_20210707220756198.jpg");
    cv::Mat result;

    double t1 = (double)cv::getTickCount();

    cv::cvtColor(srcImage, result, cv::COLOR_BGR2GRAY);
    cv::blur(result, result, cv::Size(5, 5));
    cv::Canny(result, result, 20, 100, 3);

    double t2 = ((double)cv::getTickCount() - t1) / cv::getTickFrequency() * 1000;
    std::cout << "Run Time 1 " << t2 << " ms\n";
}

void gapi()
{
    cv::Mat srcImage = cv::imread("D:\\allike\\Image_20210707220756198.jpg");
    cv::Mat result;

    //G-API只追踪管线的操作以及如何连接的。G-API的数据对象(cv::GMat)是用以连接各种操作的。
    //cv::GMat in则是一个为空的GMat信号,用于告知计算的开始。
    //然后实例化cv::GComputation这个对象。此对象把输入/输出(input/output)数据当做参数(在本例中依次是in和out这两个cv::GMat对象),
    //并基于in和out的中的数据流来重建调用图。
    double t1 = (double)cv::getTickCount();

    cv::GMat in;
    cv::GMat gray = cv::gapi::BGR2Gray(in);
    cv::GMat imgBlur = cv::gapi::blur(gray, cv::Size(5, 5));
    cv::GMat out = cv::gapi::Canny(imgBlur, 20, 100, 3);
    cv::GComputation ac(in, out);
    ac.apply(srcImage, result);

    double t2 = ((double)cv::getTickCount() - t1) / cv::getTickFrequency() * 1000;
    std::cout << "Run Time 2 " << t2 << " ms\n";

    cv::namedWindow("gapi", cv::WINDOW_NORMAL);
    cv::imshow("gapi", result);
    cv::waitKey(0);
}

int main(int argc, char *argv[])
{
    normal();
    gapi();
    return 0;
}

测试结果:

Run Time 1: 129.867 ms
Run Time 2: 96.2521 ms

加速效果还是有一些的!

3、参考文献

OpenCV Graph API初体验 - 简书OpenCV Graph API (G-API) Introduction: OpenCV的Graph API(或称G-API)是一个让常规图像处理变得更快(fast)和轻量...https://www.jianshu.com/p/8c8c08496a2c

举报

相关推荐

0 条评论