OpenCV 图形API(或称G-API)(1)

news2025/4/3 1:15:41
  • 操作系统:ubuntu22.04
  • OpenCV版本:OpenCV4.9
  • IDE:Visual Studio Code
  • 编程语言:C++11

引言

OpenCV 图形API(或称G-API)是一个新的OpenCV模块,旨在使常规图像处理更快且更便携。通过引入一种新的基于图的执行模型来实现这两个目标。

G-API是OpenCV中的一个特殊模块——与其他大多数主要模块不同,其他模块专注于提供具体的计算机视觉算法,而这个模块则充当框架的角色。G-API提供了定义计算机视觉操作的方法,使用这些操作以表达式的形式构造图,并最终为特定后端实现和运行这些操作。

注意:
G-API是一个新模块,目前正处于积极开发中。它的API目前还不稳定,未来可能会有一些虽小但却可能影响兼容性的变化。
内容

G-API文档组织如下章节:

  • 为什么需要图形API?

    G-API背后的动机及其目标。

  • 高层次设计概览

    G-API架构的一般概述及其主要内部组件。

  • 内核API

    学习如何在G-API中引入新的操作并在各种后端上实现它们。

  • 实现细节

    G-API的底层实现细节,适用于那些想要贡献代码的人。
    注:这一部分仍在进行中,等完成了我们再来看文档。

  • API参考:函数和类

    • G-API核心功能

      核心G-API操作 - 算术、布尔和其他矩阵操作;

    • G-API图像处理功能

      图像处理函数:色彩空间转换、各种滤镜等。

我会按章节来一篇一篇的写,祝愿自己能写完!!!

API 示例

下面展示了一个非常基础的G-API管道示例:


#include <opencv2/gapi.hpp>
#include <opencv2/gapi/core.hpp>
#include <opencv2/gapi/imgproc.hpp>
#include <opencv2/highgui.hpp>
#include <opencv2/videoio.hpp>
int main( int argc, char* argv[] )
{
    cv::VideoCapture cap;
    if ( argc > 1 )
        cap.open( argv[ 1 ] );
    else
        cap.open( 0 );
    CV_Assert( cap.isOpened() );
    cv::GMat in;
    cv::GMat vga     = cv::gapi::resize( in, cv::Size(), 0.5, 0.5 );
    cv::GMat gray    = cv::gapi::BGR2Gray( vga );
    cv::GMat blurred = cv::gapi::blur( gray, cv::Size( 5, 5 ) );
    cv::GMat edges   = cv::gapi::Canny( blurred, 32, 128, 3 );
    cv::GMat b, g, r;
    std::tie( b, g, r ) = cv::gapi::split3( vga );
    cv::GMat out        = cv::gapi::merge3( b, g | edges, r );
    cv::GComputation ac( in, out );
    cv::Mat input_frame;
    cv::Mat output_frame;
    CV_Assert( cap.read( input_frame ) );
    do
    {
        ac.apply( input_frame, output_frame );
        cv::imshow( "output", output_frame );
    } while ( cap.read( input_frame ) && cv::waitKey( 30 ) < 0 );
    return 0;
}

运行结果

  • G-API 是一个独立的 OpenCV 模块,所以需要显式包含它的头文件。
    在 main() 函数的开头,首先创建并初始化了 OpenCV 的标准视频捕捉对象,用于从连接的摄像机或指定文件中获取视频帧。
  • 接着构建 G-API 管道,实际上是针对 cv::GMat 数据的一系列 G-API 操作调用。需要注意的是,这一段代码仅仅是定义了要执行的动作,而并没有实际执行它们。此时没有进行任何处理,G-API 只是记录下了哪些操作组成了管道以及它们是如何连接在一起的。G-API 数据对象(这里是 cv::GMat)用于连接不同的操作。in 作为一个空的 cv::GMat 标识了计算的起点。
  • 在编写完 G-API 代码后,通过实例化 cv::GComputation 对象来捕获这些操作形成一个调用图。这个对象接受输入和输出数据引用(本例中分别是 in 和 out 的 cv::GMat 对象),并根据 in 和 out 之间的所有数据流重建调用图。
  • cv::GComputation 是一个轻量级的对象,它仅仅捕获了组成一次计算的操作。不过,它可以用来执行计算——在后续的处理循环中,每一个捕获到的帧(即 cv::Mat input_frame)都会被传递给 cv::GComputation::apply() 方法进行处理。

在这里插入图片描述

cv::GComputation::apply() 是一个支持多态的方法,它可以接受可变数量的参数。由于这里的计算是基于一个输入和一个输出定义的,因此使用了 cv::GComputation::apply() 的特殊重载版本来传递输入数据并获取输出数据。

在内部,cv::GComputation::apply() 会为给定的输入参数编译捕获的图,并立即在数据上执行编译后的图。

通过这个示例,可以概述一些重要的概念:

  • 图声明和图执行是独立的步骤:首先声明图(即定义操作流程),然后在需要的时候执行它。
  • 图是从一系列G-API表达式中隐式构建的:不需要手动创建复杂的图结构,而是通过一系列函数调用来描述处理流程,G-API会自动将其转换为相应的图。
  • G-API支持类似函数的调用和操作符:例如 cv::gapi::resize() 这样的函数调用,以及用于计算按位或的操作符 operator|()。
  • G-API语法旨在保持纯粹性:图中的每个操作调用都会产生一个新的结果,从而形成一个有向无环图(DAG)。
  • 图声明不绑定到任何数据:实际的数据对象(如 cv::Mat)是在图已经声明之后才进入过程的。

查看教程和移植示例以了解更多关于各种G-API功能和概念的信息。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2326083.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

学以致用,基于OpenCV的公摊面积估算程序

由于很多户型图并没有标注各个房间或者走廊的面积&#xff0c;亦或比较模糊&#xff0c;且很多人并不具备迅速口算多个小数相加再做除法的能力&#xff0c;本帖通过程序粗略计算公摊比例。由于非专业人士&#xff0c;公摊面积涉及到很多建筑学的专业公式&#xff0c;因此本帖只…

d2025331

目录 一、删除有序数组中的重复项II 二、删除有序数组中的重复项 三、数字转罗马格式 一、删除有序数组中的重复项II 一下写过&#xff0c;挺舒服&#xff01; 1、统计超出2的数量有多少&#xff0c;仅保留2个重复数字 2、有多少次就从后往前覆盖几次 public int removeDupl…

QT6开发指南笔记(1)QT简介,安装

&#xff08;1&#xff09;刚刚结束了 C 的学习&#xff0c;谢谢阿西老师的教导&#xff0c;开始 QT 的学习&#xff0c;运用 C &#xff0c;而非 QML 。 保持知识的连贯性。 QT 公司 &#xff1a; &#xff08;2&#xff09;接着介绍 QT 的安装&#xff1a; 提取到的…

Redis BitMap 实现签到及连续签到统计

一、引言 用户签到功能是很多应用都离不开的一个板块&#xff0c;单词打开、QQ达人等等为我们所熟知&#xff0c;这项功能该如何实现呢&#xff0c;一些朋友可能想当然的觉得无非将每日的签到数据记录下来不就好了&#xff0c;不会去细想用谁记录&#xff0c;如何记录才合适。 …

GO语言杂记(文章持续更新)

1、MAIN冲突 在一个文件夹下有两个go文件同时写了main函数&#xff0c;将会报错&#xff0c;main函数只能在main包中。 实则不然&#xff0c;有些环境下并不会报错。 2、gofmt命令---自动对齐 命令作用&#xff1a;将go文件代码自动缩进。 gofmt -w escapecharprac.go

OS6.【Linux】基本指令入门(5)

目录 1.配置公网IP到XShell中 2.日志 定义和作用 3.一些指令 date %Y、%m、%d、%H、%M、%S、%X、%F %s 时间戳的特点 时间戳的转换 cal cal 年份 其他选项 ★find★ whereis grep 练习 -v选项 -n选项 -i选项 多文件查找 特定目录下查找 1.配置公网IP到XShe…

Moo0 VideoResizer,简单高效压缩视频!

Moo0 VideoResizer 是一款免费、轻量级的视频压缩工具&#xff0c;支持通过调整文件大小、屏幕尺寸或比特率等方式实现高效视频压缩。其核心优势在于操作简单且无需破解&#xff0c;可直接下载安装使用‌。软件注重用户友好性&#xff0c;采用非破坏性压缩技术&#xff0c;所有…

【开发问题记录】高德地图 Web 端开发详解:高德地图 API 最佳实践指南(安装、marker添加、逆向地理编码、实际业务案例实操)

文章目录 1、引入高德地图的准备工作2、高德地图 JS API 使用方式2.1 JS API Loader2.1.1 使用 script 标签加载loader2.1.2 NPM 安装loader 2.2 script 标签加载 JS API 脚本2.2.1 同步加载2.2.2 异步加载 3、在 vue3 项目中使用3.1 安装 js api loader3.2 在组件中使用 4、实…

快速入手-基于Django-rest-framework的自身组件权限认证(九)

1、在对应的视图函数里增加认证&#xff08;局部起作用&#xff0c;不全局生效&#xff09; 导入类&#xff1a; from rest_framework.authentication import ( BasicAuthentication, SessionAuthentication, ) from rest_framework.permissions import IsAuthentica…

【复活吧,我的爱机!】Ideapad300-15isk拆机升级:加内存条 + 换固态硬盘 + 换电源

写在前面&#xff1a;本博客仅作记录学习之用&#xff0c;部分图片来自网络&#xff0c;如需引用请注明出处&#xff0c;同时如有侵犯您的权益&#xff0c;请联系删除&#xff01; 文章目录 前言升级成本升级流程电池健康度加内存条和换内存条光驱位加装机械硬盘更换电池重装系…

基于Spring AI开发本地Jenkins MCP Server服务

前言 首先介绍下MCP是什么&#xff1f; MCP是由开发了 Claude 模型的 Anthropic 公司2024年11月提出并开源的一项开放标准&#xff0c;全称&#xff1a;Model Context Protocol&#xff0c;它是一个开放协议&#xff0c;它使 LLM 应用与外部数据源和工具之间的无缝集成成为可能…

【nvidia】Windows 双 A6000 显卡双显示器驱动更新问题修复

问题描述&#xff1a;windows自动更新nvidia驱动会导致只检测得到一个A6000显卡。 解决方法 下载 A6000 驱动 572.83-quadro-rtx-desktop-notebook-win10-win11-64bit-international-dch-whql.exehttps://download.csdn.net/download/qq_18846849/90554276 不要直接安装。如…

《SRv6 网络编程:开启IP网络新时代》第2章、第3章:SRv6基本原理和基础协议

背景 根据工作要求、本人掌握的知识情况&#xff0c;仅针对《SRv6 网络编程&#xff1a;开启IP网络新时代》书籍中涉及的部分知识点进行总结梳理&#xff0c;并与工作小组进行分享&#xff0c;不涉及对原作的逐字搬运。 问题 组内同事提出的问题&#xff1a;本文缺扩展头描述…

如何将AI模型返回的字符串转为html元素?

场景&#xff1a; 接入deepseek模型的api到我们平台&#xff0c;返回的字符串需要做下格式化处理。 返回的数据是这样的&#xff1a; {"role": "assistant","content": "<think>\n嗯&#xff0c;用户问的是“星体是什么”。首先&am…

【PCIE711-214】基于PCIe总线架构的4路HD-SDI/3G-SDI视频图像模拟源

产品概述 PCIE711-214是一款基于PCIE总线架构的4路SDI视频模拟源。该板卡为标准的PCIE插卡&#xff0c;全高尺寸&#xff0c;适合与PCIE总线的工控机或者服务器&#xff0c;板载协议处理器&#xff0c;可以通过PCIE总线将上位机的YUV 422格式视频数据下发通过SDI接口播放出去&…

突破反爬困境:SDK开发,浏览器模块(七)

声明 本文所讨论的内容及技术均纯属学术交流与技术研究目的&#xff0c;旨在探讨和总结互联网数据流动、前后端技术架构及安全防御中的技术演进。文中提及的各类技术手段和策略均仅供技术人员在合法与合规的前提下进行研究、学习与防御测试之用。 作者不支持亦不鼓励任何未经授…

rce操作

Linux命令长度突破限制 源码 <?php $param $_REQUEST[param];if ( strlen($param) < 8 ) {echo shell_exec($param); } echo执行函数&#xff0c;$_REQUEST可以接post、get、cookie传参 源码中对参数长度做了限制&#xff0c;小于8位&#xff0c;可以利用临时函数&…

LabVIEW高效溢流阀测试系统

开发了一种基于LabVIEW软件和PLC硬件的溢流阀测试系统。通过集成神经网络优化的自适应PID控制器&#xff0c;该系统能自动进行压力稳定性、寿命以及动静态性能测试。该设计不仅提升了测试效率&#xff0c;还通过智能化控制提高了数据的精确性和操作的便捷性。 ​ 项目背景&…

DataGear 5.3.0 制作支持导出表格数据的数据可视化看板

DataGear 内置表格图表底层采用的是DataTable表格组件&#xff0c;默认并未引入导出数据的JS支持库&#xff0c;如果有导出表格数据需求&#xff0c;则可以在看板中引入导出相关JS支持库&#xff0c;制作具有导出CSV、Excel、PDF功能的表格数据看板。 在新发布的5.3.0版本中&a…

Web网页内嵌 Adobe Pdf Reader 谷歌Chrome在线预览编辑PDF文档

随着数字化办公的普及&#xff0c;PDF文档已成为信息处理的核心载体&#xff0c;虽然桌面端有很多软件可以实现预览编辑PDF文档&#xff0c;而在线在线预览编辑PDF也日益成为一个难题。 作为网页内嵌本地程序的佼佼者——猿大师中间件&#xff0c;之前发布的猿大师办公助手&am…