OpenCV 圖形API(或稱G-API)(1)

  • 操作系統: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 ] );elsecap.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.pswp.cn/web/74204.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/74204.shtml
英文地址,請注明出處:http://en.pswp.cn/web/74204.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Leetcode 3505. Minimum Operations to Make Elements Within K Subarrays Equal

Leetcode 3505. Minimum Operations to Make Elements Within K Subarrays Equal 1. 解題思路2. 代碼實現 題目鏈接&#xff1a;3505. Minimum Operations to Make Elements Within K Subarrays Equal 1. 解題思路 這一題大的思路上不難想到就是一個動態規劃的思路。我們分別…

win10之mysql server 8.0.41安裝

一 mysql server 下載 官網下載地址頁面 https://dev.mysql.com/downloads/mysql/二 免裝版使用步驟 1 解壓 下載完成后,解壓文件夾,如下所示: 2 執行安裝命令 D:\soft\mysql\mysql-8.0.41-winx64\mysql-8.0.41-winx64\bin>mysqld --install Service successfully in…

第十二屆藍橋杯省賽軟件類(cc++組)

第一題&#xff08;空間&#xff09; 解題思路 答案 #include <stdio.h>int main() {// 計算256MB對應的字節數&#xff0c;1MB 1024KB&#xff0c;1KB 1024Blong long total_bytes 256 * 1024 * 1024; // 每個32位二進制整數占4個字節&#xff08;32 / 8 4&#xf…

C++ 新特性 | C++ 11 | 移動語義

文章目錄 一、移動語義1、為什么需要移動語義&#xff1f;2、怎么“偷”&#xff1f;——右值引用&#xff08;&&&#xff09;3、如何實現移動語義&#xff1f;——移動構造函數/賦值4、什么時候觸發移動&#xff1f;5、移動 vs 拷貝 一、移動語義 1、為什么需要移動語…

wsl下ubuntu安裝寶塔

在 WSL (Windows Subsystem for Linux) 下的 Ubuntu 中安裝寶塔面板的步驟如下&#xff1a; 1. 確保 WSL 環境正常 已安裝 WSL 2 并啟用 Ubuntu 發行版&#xff08;推薦 Ubuntu 20.04/22.04&#xff09;。 在 PowerShell 中檢查 WSL 版本&#xff1a; wsl --list --verbose 如…

UDP網絡通信

UDP網絡通信&#xff1a; 步驟1 創建套接字&#xff1a; #include <sys/types.h> #include <sys/socket.h>int socket(int domain, int type, int protocol);參數一 domain&#xff1a; AF_UNIX Local communication unix(7) 本地通信 AF_INET IPv4 Inte…

教你快速理解linux中的NUMA節點探測是干什么用的?

想象一個大城市被劃分成幾個區&#xff08;比如東區、西區&#xff09;。每個區有自己的超市&#xff08;內存&#xff09;&#xff0c;居民&#xff08;CPU&#xff09;去本區的超市買東西最快&#xff0c;去其他區的超市會慢一些。 NUMA節點探測&#xff0c;就是Linux系統在…

使用 Less 實現 PC 和移動端樣式適配

&#x1f310; 使用 Less 實現 PC 和移動端樣式適配 —— 以 position 屬性為例 在前端開發中&#xff0c;我們常常會遇到這樣一個場景&#xff1a; 在 PC 頁面中需要某個元素是 position: relative;&#xff0c;但在移動端卻希望它是 position: inherit;&#xff0c;以便更靈…

企業戰略管理(設計與工程師類)-2-戰略規劃及管理過程-1-概述

戰略管理過程 參考資料&#xff1a; 戰略管理 - 清華大學- 蔡臨寧公司戰略與風險管理 - 華中科技大學 - 賀遠瓊戰略管理 - 北京理工大學 - 楊萬榮DeepSeek - 深度思考與聯網檢索 AFI框架 戰略管理最典型的就是采用傳統的AFI通用戰略管理框架&#xff08;模型&#xff09;&a…

Swoole 的 Hyperf 框架和 Go 的 Gin 框架高并發原理以及技術實現對比分析

Swoole 的 Hyperf 框架和 Go 的 Gin 框架雖然都支持高并發&#xff0c;但它們的實現原理、底層機制和適用場景有顯著差異。以下從 高并發原理、技術實現區別、優缺點 三個方面詳細分析&#xff1a; 一、高并發實現原理 1. Hyperf (PHP Swoole) Hyperf 的高并發能力基于 Swoo…

【教程】如何利用bbbrisk一步一步實現評分卡

利用bbbrisk一步一步實現評分卡 一、什么是評分卡1.1.什么是評分卡1.2.評分卡有哪些 二、評分卡怎么弄出來的2.1.如何制作評分卡2.2.制作評分卡的流程 三、變量的分箱3.1.數據介紹3.2.變量自動分箱3.3.變量的篩選 四、構建評分卡4.1.評分卡實現代碼4.2.評分卡表4.3.閾值表與分數…

AI日報 - 2025年4月2日

&#x1f31f; 今日概覽&#xff08;60秒速覽&#xff09; ▎&#x1f916; AGI突破 | 研究揭示零RL訓練可誘發模型頓悟&#xff0c;Anthropic發布Claude 3.5內部機制研究&#xff0c;簡化語言模型推理優化新方法提出。 DeepSeek-R1無需額外指令即可深度推理&#xff1b;Anthro…

探索 Kubernetes 網絡穿透:如何從外部訪問 K8s Pod 地址

文章目錄 探索 Kubernetes 網絡穿透&#xff1a;如何從外部訪問 K8s Pod 地址為什么需要外部訪問 Pod 地址&#xff1f;常見的網絡穿透方案NodePortLoadBalancerIngressPort-ForwardHostNetworkkt-connect&#xff1a;為開發調試提供便捷穿透 實踐建議與注意事項各方案對比表總…

深入理解 Apache Dagster:數據管道編排實戰指南

本文系統介紹了 Apache Dagster 的核心概念與實踐方法&#xff0c;涵蓋環境搭建、管道定義、運行調試及高級功能&#xff0c;幫助開發者快速掌握這一現代化數據編排工具&#xff0c;提升數據工程效率。 1. 背景與核心優勢 隨著數據驅動應用的復雜化&#xff0c;傳統工具在可維…

Minio集群部署

Minio集群部署 資源規劃 IP服務規劃配置192.168.116.138minio-116核32G磁盤10T192.168.116.139minio-216核32G磁盤10T192.168.116.140minio-316核32G磁盤10T192.168.116.141minio-416核32G磁盤10T192.168.116.128nginx代理8核16G磁盤500G 基本環境配置 下面命令minio4臺設備…

操作系統高頻(六)linux內核

操作系統高頻&#xff08;六&#xff09;linux內核 1.內核態&#xff0c;用戶態的區別??? 內核態和用戶態的區別主要在于權限和安全性。 權限&#xff1a;內核態擁有最高的權限&#xff0c;可以訪問和執行所有的系統指令和資源&#xff0c;而用戶態的權限相對較低&#x…

強大而易用的JSON在線處理工具

強大而易用的JSON在線處理工具&#xff1a;程序員的得力助手 在當今的軟件開發世界中&#xff0c;JSON&#xff08;JavaScript Object Notation&#xff09;已經成為了數據交換的通用語言。無論是前端還是后端開發&#xff0c;我們都經常需要處理、驗證和轉換JSON數據。今天&a…

【學習記錄】pytorch載入模型的部分參數

需要從PointNet網絡框架中提取encoder部分的參數&#xff0c;然后賦予自己的模型。因此&#xff0c;需要從一個已有的.pth文件讀取部分參數&#xff0c;加載到自定義模型上面。做了一些嘗試&#xff0c;記錄如下。 關于模型保存與載入 torch.save(): 使用Python的pickle實用程…

【藍橋杯14天沖刺課題單】Day 8

1.題目鏈接&#xff1a;19714 數字詩意 這道題是一道數學題。 先考慮奇數&#xff0c;已知奇數都可以表示為兩個相鄰的數字之和&#xff0c;2k1k(k1) &#xff0c;那么所有的奇數都不會被計入。 那么就需要考慮偶數什么情況需要被統計。根據打表&#xff0c;其實可以發現除了…

鴻蒙ArkTS開發:微信/系統來電通話監聽功能實現

本文將介紹如何在鴻蒙應用中使用ArkTS實現通話監聽和錄音功能&#xff0c;利用harmony-utils工具庫簡化開發流程。 工具庫地址 一、功能概述 本實現包含以下核心功能&#xff1a; 通話狀態監聽&#xff1a;檢測來電、去電和通話中狀態 音頻流監控&#xff1a;通過麥克風使用…