OpenCV 圖形API(2)為什么需要圖形API?

  • 操作系統:ubuntu22.04
  • OpenCV版本:OpenCV4.9
  • IDE:Visual Studio Code
  • 編程語言:C++11

G-API背后的動機

G-API模塊為OpenCV帶來了基于圖的執行模型。本章簡要描述了這種新模型如何在兩個方面幫助軟件開發者:優化和移植圖像處理算法。

使用Graph API進行優化

傳統上,OpenCV提供了大量的獨立圖像處理函數(參見core和imgproc模塊)。許多函數都經過了良好的優化(例如,針對特定CPU進行了向量化、并行化等),但是開箱即用的優化范圍僅限于單個函數——構建在這些函數之上的整個算法的優化是程序員的責任。

OpenCV 3.0引入了透明API(或T-API),它允許透明地將OpenCV函數調用卸載到OpenCL設備,并通過cv::UMat減少主機/設備數據傳輸——這是向前邁出的一大步。然而,T-API是一個動態API——用戶代碼仍然不受約束,OpenCL內核以任意順序排隊,因此消除了進一步的流水線級別優化潛力。

G-API為OpenCV 4.0帶來了隱式的圖模型。圖模型捕獲流水線中的所有操作及其數據依賴關系,從而為G-API框架提供了額外的信息來進行流水線級別的優化。

基于圖的優化的核心是分塊(Tiling)。分塊允許將處理分解為較小的部分并重新組織操作以啟用數據并行性、改善數據局部性并節省內存占用。由于現代計算機架構中內存訪問的不同成本,數據局部性是軟件優化的一個特別重要的方面——在第一級緩存中重用的數據越多,流水線就越高效。

當然,上述技術可以手動應用——但這需要額外的技能和對目標平臺的了解,且算法實現會變得不可逆地更加具體、靈活性降低、更難擴展和維護。

G-API從用戶那里接手了這一責任和復雜性,并自行完成了大部分工作,保持算法代碼免受設備或優化細節的影響。然而,這種方法也有其自身的局限性,因為圖模型是一種受限模型,并非每個算法都可以表示為圖,所以G-API的范圍僅限于常規圖像處理——各種濾鏡、算術運算、二進制操作以及定義明確的幾何變換。

使用Graph API進行移植

G-API的本質在于聲明一系列要運行的操作,然后執行該序列。G-API是一個受限的API,因此它對哪些操作可以形成一個流水線以及這些操作之間可以交換哪些數據施加了一些限制。

實際上,這種形式化有助于使算法具有可移植性。G-API清晰地分離了操作接口與其實現。

一個操作(內核)可能有多個實現,甚至在同一設備上(例如,基于OpenCV的“參考”實現和分塊優化的實現,兩者都在CPU上運行)。在G-API術語中,圖(或計算)僅使用操作接口構建,而不是使用實現——因此相同的圖可以在不同的設備上執行(當然,也可以使用不同的優化技術),而幾乎不需要改變圖本身。

G-API支持插件(后端),這些插件聚集了關于在特定平臺上最佳執行方式的邏輯和智能。一旦使用G-API構建了一個流水線,就可以參數化以使用其中任何一種后端(或它們的組合),從而使圖能夠輕松移植到新平臺。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/75877.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/75877.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/75877.shtml

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

相關文章

基于Spring AI開發本地Jenkins MCP Server服務

前言 首先介紹下MCP是什么? MCP是由開發了 Claude 模型的 Anthropic 公司2024年12月提出并開源的一項開放標準,全稱:Model Context Protocol,它是一個開放協議,它使 LLM 應用與外部數據源和工具之間的無縫集成成為可能…

vcpkg安裝指定版本的庫

一.vcpkg安裝 使用git將vcpkg源碼克隆到本地制定目錄(D:\vcpkg),并初始化 git clone https://github.com/microsoft/vcpkg.git cd vcpkg ./bootstrap-vcpkg.sh # Linux/macOS .\bootstrap-vcpkg.bat # Windows 如下圖: 二.安…

數據結構C語言練習(單雙鏈表)

本篇練習題(單鏈表): 1.力扣 203. 移除鏈表元素 2.力扣 206. 反轉鏈表 3.力扣 876. 鏈表的中間結點 4.力扣 21. 合并兩個有序鏈表 5. 牛客 鏈表分割算法詳解 6.牛客 鏈表回文結構判斷 7. 力扣 160. 相交鏈表 8. 力扣 141 環形鏈表 9. 力扣 142 環形鏈表 II…

nginx部署前端項目(linux、docker)

引言 在CentOS 7系統上使用docker安裝nginx,使用nginx部署一個由Vue開發、打包的項目 docker安裝nginx 這里不多贅述,直接上docker-compose.yml代碼 nginx:container_name: nginximage: nginx:1.27.2ports:- "80:80"volumes:- /docker/ngin…

WPF ContentPresenter詳解2

ContentPresenter與ContentControl的區別 ContentControl 和 ContentPresenter 是 WPF 中兩個相關的控件,但它們在用途和功能上有一些關鍵的區別。理解這兩者的區別和聯系有助于更好地設計和開發用戶界面。 1. 類層次結構 ContentControl:位于 WPF 控件…

【HTML5游戲開發教程】零基礎入門合成大西瓜游戲實戰 | JS物理引擎+Canvas動畫+完整源碼詳解

《從咖啡杯到財務自由:一個程序員的合成之旅——當代碼遇上物理引擎的匠心之作》 🌟 這是小游戲開發系列的第四篇送福利文章,感謝一路以來支持和關注這個項目的每一位朋友! 💡 文章力求嚴謹,但難免有疏漏之…

鴻蒙OS 5.0 服務能力框架深入剖析

鴻蒙OS 5.0 服務能力框架中關鍵類的作用分析 1\. 鴻蒙OS 5.0 服務能力框架導論 鴻蒙OS 5.0,亦稱鴻蒙智聯 5 1,標志著華為在分布式操作系統領域邁出的重要一步。與早期版本采用兼容安卓的AOSP層、Linux內核以及LiteOS內核不同,鴻蒙OS 5.0 專注…

RTMP推流+EasyDSS云服務+邊緣AI分析的無人機監控系統設計

在現代科技不斷發展的背景下,無人機技術已經廣泛應用于各個領域,從航拍攝影到工業巡檢,從農業監測到應急救援,無人機以其高效的工作能力,為人們的生活和工作帶來了諸多便利與創新,而其視頻傳輸與分析系統更…

HCIP(VLAN綜合實驗)

實驗拓補圖 實驗分析 一、實驗目的 掌握VLAN的創建和配置方法理解VLAN在局域網中的作用學習如何通過VLAN實現網絡隔離和通信 二、實驗環境 交換機(SW1、SW2、SW3)個人電腦(PC1、PC2、PC3、PC4、PC5、PC6)路由器(R1…

Linux系統編程 | 線程的基本概念

💓個人主頁:mooridy 💓專欄地址:Linux 關注我🌹,和我一起學習更多計算機的知識! 🔝🔝🔝 什么是線程 程序中的一個執行路線就叫做線程 一個進程至少要有一個執行線程,單…

小林coding-12道Spring面試題

1.說一下你對 Spring 的理解?spring的核心思想說說你的理解? 2.Spring IoC和AOP 介紹一下?Spring的aop介紹一下?IOC和AOP是通過什么機制來實現的?怎么理解SpringIoc?依賴倒置,依賴注入,控制反轉分別是什么?依賴注…

第十二章——位運算

按位的與& 若x的第i位和y的第i位都是1,那么(x&y)1,否則(x&y) 0 應用:希望讓某一位或某些位為0 。取一個數中的一段。 按位的或| 若x的第i位1或y的第i位1,那么&…

計算機等級考試數據庫三級(筆記3)

插入 修改 現要創建一個具有如下功能的觸發器:每當在銷售表中插入一條銷售記錄時,修改商品表中對應商品的銷售總量,假設一次只插入一條銷售記錄。請補全下列代碼。CREATE TRIGGER tri insert on xx FOR xx AS xx 商品表 xx 銷售總量xx (SELEC…

【Leetcode 每日一題】2716. 最小化字符串長度

問題背景 給你一個下標從 0 0 0 開始的字符串 s s s,重復執行下述操作 任意 次: 在字符串中選出一個下標 i i i,并使 c c c 為字符串下標 i i i 處的字符。并在 i i i 左側(如果有)和 右側(如果有&…

Flutter中實現拍照識題的功能

文章目錄 **1. 功能拆解****2. 具體實現步驟****(1) 拍照或選擇圖片****(2) 圖片預處理(可選)****(3) 文字識別(OCR)****(4) 數學公式識別 → LaTeX****方案1:Mathpix API(高精度,付費&#xff…

【Mysql:內置函數】

日期函數: 查看當前日期: select current_date();查看當前時間: select current_time(); 查看當前時間戳: select current_timestamp(); 計算兩個日期的差值: select datediff(date1,date2); 當前的日期時間&a…

71. 我的第一個Linux驅動實驗

一、字符設備驅動框架 字符設備驅動的編寫主要就是驅動對應的open、close、read。。。其實就是 file_operations結構體的成員變量的實現。 其中關于 C 庫以及如何通過系統調用“陷入” 到內核空間這個我們不用去管,我們重點關注的是應用程序和具體的驅動&#xff0…

jdk21使用Vosk實現語音文字轉換,免費的語音識別

1.下載vosk的model vosk官網&#xff1a;https://alphacephei.com/vosk/models 我這里使用較小的vosk-model-small-cn-0.22 2.添加相關pom文件 <!-- 獲取音頻信息 --><dependency><groupId>org</groupId><artifactId>jaudiotagger</artifac…

如何一鍵安裝所有Python項目的依賴!

在開發項目時&#xff0c;常常需要在多個環境中安裝各種依賴。對開發者來說&#xff0c;每次手動一個個安裝這些依賴是不是很麻煩&#xff1f;&#x1f605; 其實有個超簡單的辦法&#xff01;只需要一個腳本&#xff0c;就能快速解決問題&#xff01;&#x1f4a1; 這就是我們…

Blender配置渲染設置并輸出動畫

在Blender中&#xff0c;渲染設置和渲染動畫的選項位于不同的面板中。以下是具體步驟&#xff1a; 渲染設置 渲染設置用于配置輸出格式、分辨率、幀率等參數。 打開右側的 屬性面板&#xff08;按 N 鍵可切換顯示&#xff09;。 點擊 “輸出屬性” 選項卡&#xff08;圖標是…