OpenCV中適用華為昇騰(Ascend)后端的逐元素操作(Per-element Operations)

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

算法描述

針對華為昇騰(Ascend)后端的逐元素操作(Per-element Operations),這些操作通常用于圖像處理和計算機視覺任務,通過 Ascend NPU 提供加速。這類操作包括但不限于加法、減法、乘法等基本算術運算,以及更復雜的顏色空間轉換、閾值處理等。

具體的函數和實現細節可能會根據 OpenCV 版本以及 Ascend SDK 的集成有所不同,但以下是一些常見的逐元素操作及其 C++ 示例代碼。

請注意,因為 cv::cann 命名空間下的函數不是標準 OpenCV 庫的一部分,而是特定于支持 Ascend 加速的擴展模塊,所以確保你使用的 OpenCV 版本已正確集成了對 Ascend 的支持,并且你的開發環境已經配置好相應的庫和頭文件。

主要函數

加法 (cv::cann::add)

函數原型
void cv::cann::add
(const InputArray src1,const InputArray src2,OutputArray dst,const InputArray mask = noArray(),int dtype = -1,AscendStream &stream = AscendStream::Null()
);
參數介紹
  • src1: 第一個輸入數組。
  • src2: 第二個輸入數組。
  • dst: 輸出數組,與輸入大小和類型相同(除非指定了不同的dtype)。
  • mask: 可選掩碼,8位單通道數組,指定要更改的輸出數組元素。
  • dtype: 輸出數組的數據類型,若為-1,則使用輸入的深度。
  • stream: Ascend流對象,用于異步執行。
示例代碼
include <opencv2/opencv.hpp>
#include <opencv2/cann/cann.hpp>int main(){cv::Mat src1 = cv::Mat::ones(480, 640, CV_8UC3) * 50;cv::Mat src2 = cv::Mat::ones(480, 640, CV_8UC3) * 100;cv::Mat dst;cv::cann::AscendStream stream;cv::cann::add(src1, src2, dst, cv::noArray(), -1, stream);stream.waitForCompletion();cv::imshow("Add Result", dst);cv::waitKey(0);return 0;
}

減法 (cv::cann::subtract)

函數原型
void cv::cann::subtract
(const InputArray src1,const InputArray src2,OutputArray dst,const InputArray mask = noArray(),int dtype = -1,AscendStream &stream = AscendStream::Null()
);
參數介紹

同cv::cann::add。

示例代碼
int main() {cv::Mat src1 = cv::Mat::ones(480, 640, CV_8UC3) * 100;cv::Mat src2 = cv::Mat::ones(480, 640, CV_8UC3) * 50;cv::Mat dst;cv::cann::AscendStream stream;cv::cann::subtract(src1, src2, dst, cv::noArray(), -1, stream);stream.waitForCompletion();cv::imshow("Subtract Result", dst);cv::waitKey(0);return 0;
}

乘法 (cv::cann::multiply)

函數原型

v

oid cv::cann::multiply
(const InputArray src1,const InputArray src2,OutputArray dst,double scale = 1,int dtype = -1,AscendStream &stream = AscendStream::Null()
);
參數介紹
  • scale: 縮放因子,默認值為1。
  • 其他參數同上。
示例代碼
int main() {cv::Mat src1 = cv::Mat::ones(480, 640, CV_8UC3) * 50;cv::Mat src2 = cv::Mat::ones(480, 640, CV_8UC3) * 2;cv::Mat dst;cv::cann::AscendStream stream;cv::cann::multiply(src1, src2, dst, 1.0, -1, stream);stream.waitForCompletion();cv::imshow("Multiply Result", dst);cv::waitKey(0);return 0;
}

除法 (cv::cann::divide)

函數原型
void cv::cann::divide
(const InputArray src1,const InputArray src2,OutputArray dst,double scale = 1,int dtype = -1,AscendStream &stream = AscendStream::Null()
);
參數介紹
  • scale: 縮放因子,默認值為1。
  • 其他參數同上。
示例代碼
int main() {cv::Mat src1 = cv::Mat::ones(480, 640, CV_8UC3) * 100;cv::Mat src2 = cv::Mat::ones(480, 640, CV_8UC3) * 2;cv::Mat dst;cv::cann::AscendStream stream;cv::cann::divide(src1, src2, dst, 1.0, -1, stream);stream.waitForCompletion();cv::imshow("Divide Result", dst);cv::waitKey(0);return 0;
}

按位與 (cv::cann::bitwise_and)

函數原型
void cv::cann::bitwise_and
(const InputArray src1,const InputArray src2,OutputArray dst,const InputArray mask = noArray(),AscendStream &stream = AscendStream::Null()
);
參數介紹
  • src1: 第一個輸入數組或標量。
  • src2: 第二個輸入數組或標量。
  • dst: 輸出數組,與輸入大小和類型相同。
  • mask: 可選掩碼,8位單通道數組,指定要更改的輸出數組元素。
  • stream: Ascend流對象,用于異步執行。
示例代碼
int main() {cv::Mat src1 = (cv::Mat_<uchar>(3, 3) << 0xFF, 0x0F, 0xF0,0xAA, 0x55, 0x00,0xFF, 0xFF, 0x00);cv::Mat src2 = (cv::Mat_<uchar>(3, 3) << 0x0F, 0x0F, 0x0F,0x0F, 0x0F, 0x0F,0x0F, 0x0F, 0x0F);cv::Mat dst;cv::cann::AscendStream stream;cv::cann::bitwise_and(src1, src2, dst, cv::noArray(), stream);stream.waitForCompletion();std::cout << "Result of bitwise_and:\n" << dst << std::endl;return 0;
}

按位非 (cv::cann::bitwise_not)

函數原型
void cv::cann::bitwise_not
(const InputArray src,OutputArray dst,const InputArray mask = noArray(),AscendStream &stream = AscendStream::Null()
);
參數介紹
  • src: 輸入數組或標量。
  • dst: 輸出數組,與輸入大小和類型相同。
  • mask: 可選掩碼,8位單通道數組,指定要更改的輸出數組元素。
  • stream: Ascend流對象,用于異步執行。
示例代碼
int main() {cv::Mat src = (cv::Mat_<uchar>(2, 2) << 0x00, 0xFF,0xAA, 0x55);cv::Mat dst;cv::cann::AscendStream stream;cv::cann::bitwise_not(src, dst, cv::noArray(), stream);stream.waitForCompletion();std::cout << "Result of bitwise_not:\n" << dst << std::endl;return 0;
}

按位或 (cv::cann::bitwise_or)

函數原型
void cv::cann::bitwise_or
(const InputArray src1,const InputArray src2,OutputArray dst,const InputArray mask = noArray(),AscendStream &stream = AscendStream::Null()
);
參數介紹
  • 同cv::cann::bitwise_and。
示例代碼

類似于cv::cann::bitwise_and,只需將bitwise_and替換為bitwise_or。

按位異或 (cv::cann::bitwise_xor)

函數原型
void cv::cann::bitwise_xor
(const InputArray src1,const InputArray src2,OutputArray dst,const InputArray mask = noArray(),AscendStream &stream = AscendStream::Null()
);
參數介紹

同cv::cann::bitwise_and。

示例代碼

類似于cv::cann::bitwise_and,只需將bitwise_and替換為bitwise_xor。

閾值處理 (cv::cann::threshold)

函數原型
double cv::cann::threshold
(const InputArray src,OutputArray dst,double thresh,double maxval,int type,AscendStream &stream = AscendStream::Null()
);
參數介紹
  • thresh: 閾值。
  • maxval: 最大值,用于某些類型的閾值處理。
  • type: 閾值處理類型(如THRESH_BINARY, THRESH_TOZERO等)。
  • stream: Ascend流對象,用于異步執行。
示例代碼
int main() {cv::Mat src = (cv::Mat_<uchar>(3, 3) << 50, 100, 150,200, 20,  30,80,  90, 100);cv::Mat dst;cv::cann::AscendStream stream;double thresholdValue = 100;double maxValue = 255;int thresholdType = cv::THRESH_BINARY;double otsuThreshold = cv::cann::threshold(src, dst, thresholdValue, maxValue, thresholdType, stream);stream.waitForCompletion();std::cout << "Otsu Threshold Value: " << otsuThreshold << std::endl;std::cout << "Threshold Result:\n" << dst << std::endl;return 0;
}

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

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

相關文章

Web前端VSCode如何解決打開html頁面中文亂碼的問題(方法2)

Web前端—VSCode如何解決打開html頁面中文亂碼的問題&#xff08;方法2&#xff09; 1.打開VScode后&#xff0c;依次點擊 文件 >> 首選項 >> 設置 2.打開設置后&#xff0c;依次點擊 文本編輯器 >> 文件&#xff08;或在搜索框直接搜索“files.autoGuessEnc…

【UltralyticsYolo11圖像分類完整項目-04】代碼重構

經過上一篇博客,我們實現 了一個cpp文件,可以預測單個圖像和多個圖像。為了更加簡化代碼,方便部署,我們需要對代碼進行重構:將功能模塊化到頭文件中。 完整代碼下載鏈接:點擊這里 重構的優點 模塊化設計:將不同功能分離到不同的類中,每個類有明確的職責更好的可維護性:…

Debezium RelationalSnapshotChangeEventSource詳解

Debezium RelationalSnapshotChangeEventSource詳解 1. 類的作用與功能 1.1 核心功能 RelationalSnapshotChangeEventSource是Debezium中用于關系型數據庫快照的核心抽象類,主要負責: 數據快照:對數據庫表進行全量數據快照模式捕獲:捕獲數據庫表結構事務管理:確保快照過…

DeepInjectSQL - 基于 AI 生成對抗網絡(GAN)的下一代 SQL 注入自動化漏洞獵手

概述 SQLMap本身是一個成熟的自動化SQL注入工具&#xff0c;可以與GAN結合起來&#xff0c;讓GAN生成的Payload替代傳統的手工或規則生成的測試用例&#xff0c;從而提高檢測的覆蓋率和效率。 分析可行性 GAN通常用于生成類似真實數據分布的數據&#xff0c;例如圖片、文本等。…

Python 爬蟲之 XPath 元素定位

XPath 簡介 XPath (XML Path Language) 最初是為了在 XML 文檔中進行導航而設計的語言&#xff0c;后來被廣泛應用于 HTML 文檔的解析。與 BeautifulSoup 相比&#xff0c;XPath 有以下特點&#xff1a; 語法強大&#xff1a;可以通過簡潔的表達式精確定位元素跨平臺性&#…

聊聊自動化辦公未來趨勢

1. 自動化辦公未來趨勢 1.1 智能化與AI融合加深 隨著人工智能技術的不斷成熟&#xff0c;其在自動化辦公中的應用將更加廣泛和深入。未來&#xff0c;辦公軟件將具備更強的智能交互能力&#xff0c;能夠理解自然語言指令&#xff0c;自動完成復雜的任務&#xff0c;如文檔編輯…

智慧工會服務平臺建設方案Word(23頁)

1. 引言 隨著信息技術的快速發展&#xff0c;傳統工會服務模式面臨挑戰&#xff0c;智慧工會服務平臺應運而生。該平臺旨在通過數字化手段&#xff0c;整合工會資源&#xff0c;優化服務流程&#xff0c;提高工作效率&#xff0c;為會員提供更加便捷、高效、個性化的服務體驗。…

React Hooks 深入淺出

目錄 引言&#xff1a;React Hooks 的革命基礎 Hooks useState&#xff1a;狀態管理的新方式useEffect&#xff1a;組件生命周期的替代方案useContext&#xff1a;簡化 Context API 額外的 Hooks useReducer&#xff1a;復雜狀態邏輯的管理useCallback 與 useMemo&#xff1a;…

【應急響應】- 日志流量如何分析?

【應急響應】- 日志流量如何下手&#xff1f;https://mp.weixin.qq.com/s/dKl8ZLZ0wjuqUezKo4eUSQ

stm32 debug卡在0x1FFFxxxx

自己畫的一個四軸飛機電路板&#xff0c;之前還能debug&#xff0c;改了一下mos管兩端的電阻&#xff0c;還能正常下載&#xff0c;藍牙接收也正常&#xff0c;但是debug出問題了&#xff0c;剛下載就自動運行&#xff0c;然后程序就在0x1FFFxxxx附近循環運行&#xff0c;這一塊…

java-----------------多態

多態&#xff0c;當前指的是 java 所呈現出來的一個對象 多態 定義 多態是指同一個行為具有多個不同表現形式或形態的能力。在面向對象編程中&#xff0c;多態通過方法重載和方法重寫來實現。 強弱類型語言 javascript 或者python 是弱類型語言 C 語言&#xff0c;或者 C…

Java 23種設計模式 - 結構型模式7種

Java 23種設計模式 - 結構型模式7種 1 適配器模式 適配器模式把一個類的接口變換成客戶端所期待的另一種接口&#xff0c;從而使原本因接口不匹配而無法在一起工作的兩個類能夠在一起工作。 優點 將目標類和適配者類解耦增加了類的透明性和復用性&#xff0c;將具體的實現封…

Git clone時出現SSL certificate problem unable to get local issuer certificate

正確解決方法 git config --global http.sslVerify false錯誤解決方法&#xff1a;&#xff08;主要是看錯了嘿嘿&#xff0c;但是如果是 OpenSSL SSL_read: Connection was reset, errno 10054 Failed to connect to github.com port 443: Timed out 原…

DevExpressWinForms-AlertControl-使用教程

文章目錄 AlertControl-使用教程一、將 AlertControl 添加到 Form二、編輯 AlertControl 的 HtmlTemplateHTML Template Editor介紹編輯HTML Template 三、使用AlertControl彈出AlertAlert中的按鈕事件獲取 Alert 標題等信息向Alert傳遞參數 總結源碼 AlertControl-使用教程 一…

制作項目進度表常用的 8 款項目管理工具分享

在數字化管理和高效協作的今天&#xff0c;項目進度表軟件已經成為企業管理不可或缺的工具。無論是中小型企業還是大型機構&#xff0c;都需要通過精準的項目計劃和實時的進度跟蹤來確保業務目標的順利達成。這篇文章將聚焦項目進度表軟件&#xff0c;深入探討市場上8款主流產品…

SecureCRT網絡穿透/代理

場景 公司的辦公VPN軟件只有Windows系統版本&#xff0c;沒有Macos系統版本&#xff0c;而日常開發過程中需要先登錄VPN后&#xff0c;然后才能登錄應用服務器。 目的&#xff1a;Macos系統在使用SecureCRT時&#xff0c;登錄服務器&#xff0c;需要走Parallels Desktop進行網絡…

【計算機網絡-傳輸層】傳輸層協議-TCP核心機制與可靠性保障

&#x1f4da; 博主的專欄 &#x1f427; Linux | &#x1f5a5;? C | &#x1f4ca; 數據結構 | &#x1f4a1;C 算法 | &#x1f152; C 語言 | &#x1f310; 計算機網絡 上篇文章&#xff1a;傳輸層協議-UDP 下篇文章&#xff1a; 網絡層 我們的講解順序是&…

OpenMagnetic的介紹與使用

1. Background OM&#xff08;OpenMagnetic&#xff09;OpenMagnetics&#xff0c;能涵蓋氣隙磁阻&#xff0c;磁導率&#xff0c;鐵芯損耗、磁滯損耗、渦流電流損耗、渦流效應、漏感、溫升的計算與仿真[1]。 鐵損計算模型&#xff1a;改進的Steinmetz方程[2] 氣隙阻抗計算&…

【JVM】從零開始深度解析JVM

本篇博客給大家帶來的是JVM的知識點, 重點在類加載和垃圾回收機制上. &#x1f40e;文章專欄: JavaEE初階 &#x1f680;若有問題 評論區見 ? 歡迎大家點贊 評論 收藏 分享 如果你不知道分享給誰,那就分享給薯條. 你們的支持是我不斷創作的動力 . 王子,公主請閱&#x1f680; …

字符串---Spring字符串基本處理

一、String類的特性 不可變性 String對象一旦創建&#xff0c;內容不可更改&#xff0c;任何修改操作都會生成新對象。字符串常量池 字符串字面量&#xff08;如"abc"&#xff09;直接存儲在常量池中&#xff0c;重復字面量共享同一內存地址。創建方式 雖然都是字符…