OpenCV CUDA模塊設備層-----高效地計算兩個 uint 類型值的帶權重平均值

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

算法描述

OpenCV 的 CUDA 模塊(cudev) 中的一個設備端內聯函數,用于高效地計算兩個 uint 類型值的帶權重平均值。
該函數返回兩個無符號整數 a 和 b 的加權平均值,權重為:

return (a * 3 + b) / 4;

函數原型

__device__ __forceinline__ uint cv::cudev::vavg4(uint a, uint b)

參數

  • a uint 第一個無符號整數(權重為 3)
  • b uint 第二個無符號整數(權重為 1)

代碼


#include <opencv2/cudev.hpp>
#include <opencv2/cudev/util/simd_functions.hpp>using namespace cv::cudev;// CUDA kernel
template <typename T>
__global__ void computeWeightedAvgKernel(const PtrStep<T> src1,const PtrStep<T> src2,PtrStep<T> dst,int width,int height)
{int x = blockIdx.x * blockDim.x + threadIdx.x;int y = blockIdx.y * blockDim.y + threadIdx.y;if (x < width && y < height) {uint a = static_cast<uint>(src1(y, x));uint b = static_cast<uint>(src2(y, x));dst(y, x) = static_cast<T>(vavg4(a, b));  // (a*3 + b)/4}
}int main() {// 讀取兩幅圖像cv::Mat h_src1 = cv::imread("/media/dingxin/data/study/OpenCV/sources/images/img0.jpg", cv::IMREAD_GRAYSCALE);cv::Mat h_src2 = cv::imread("/media/dingxin/data/study/OpenCV/sources/images/img1.jpg", cv::IMREAD_GRAYSCALE);if (h_src1.empty() || h_src2.empty()) {std::cerr << "Failed to load images!" << std::endl;return -1;}// 上傳到 GPUcv::cuda::GpuMat d_src1, d_src2, d_avg;d_src1.upload(h_src1);d_src2.upload(h_src2);d_avg.create(h_src1.size(), h_src1.type());// 設置 kernel 參數dim3 block(16, 16);dim3 grid((d_src1.cols + block.x - 1) / block.x,(d_src1.rows + block.y - 1) / block.y);// 啟動 kernel(顯式指定模板參數 uchar)computeWeightedAvgKernel<uchar><<<grid, block>>>(d_src1, d_src2, d_avg, d_src1.cols, d_src1.rows);// 下載結果并顯示cv::Mat h_avg;d_avg.download(h_avg);cv::imshow("Original Image 1", h_src1);cv::imshow("Original Image 2", h_src2);cv::imshow("Weighted Averaged Image", h_avg);cv::waitKey(0);return 0;
}

運行結果

在這里插入圖片描述

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

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

相關文章

[學習記錄]Unity毛發渲染[URP]-Shell基礎版

毛發&#xff0c;無論是人類的頭發、動物的皮毛&#xff0c;還是奇幻生物的絨毛&#xff0c;都是構成生命感和真實感不可或缺的元素。它對光線的獨特散射、吸收和反射&#xff0c;賦予了物體柔軟、蓬松、有生命力的質感。它不僅僅是讓角色看起來更“毛茸茸”那么簡單&#xff0…

數字孿生技術引領UI前端設計潮流:增強現實(AR)的集成應用

hello寶子們...我們是艾斯視覺擅長ui設計、前端開發、數字孿生、大數據、三維建模、三維動畫10年經驗!希望我的分享能幫助到您!如需幫助可以評論關注私信我們一起探討!致敬感謝感恩!一、引言&#xff1a;AR 與數字孿生融合的設計革新浪潮在體驗經濟與技術融合的雙重驅動下&…

碰一碰發視頻源碼搭建與定制化開發:支持OEM

在近場通信&#xff08;NFC&#xff09;技術與移動終端深度融合的背景下&#xff0c;“碰一碰發視頻” 功能憑借便捷的交互體驗&#xff0c;在商業推廣、信息傳遞等場景中快速落地。不同于標準化解決方案的黑盒模式&#xff0c;基于源碼的定制化開發能從底層優化傳輸效率、提升…

Ubuntu 24.04 安裝配置 Redis 7.0 開機自啟

下載源碼 wget https://download.redis.io/releases/redis-7.0.12.tar.gz安裝依賴 & 準備環境 sudo apt update && sudo apt upgrade -y sudo apt install -y build-essential tcl curl解壓 tar xzf redis-7.0.12.tar.gz編譯安裝 cd redis-7.0.12 make -j$(nproc) …

【Linux 系統】基礎IO——Linux中對文件的理解

13.基礎IO(1) 文章目錄13.基礎IO(1)文件的基本概念&#xff1a;內容與屬性文件的打開機制&#xff1a;fopen 和 open被打開的文件與磁盤文件的區別文件的內核數據結構文件與進程的交互方式標準輸入/輸出/錯誤與文件流系統調用與文件描述符文件打開模式&#xff08;r/w/a/a&…

Go調度器的搶占機制:從協作式到異步搶占的演進之路|Go語言進階(7)

想象一下這樣的場景&#xff1a;你在餐廳排隊等位&#xff0c;前面有個人點了餐卻一直霸占著座位玩手機&#xff0c;后面的人只能干等著。這就是Go早期版本面臨的問題——一個goroutine如果不主動讓出CPU&#xff0c;其他goroutine就只能餓著。 今天我們來聊聊Go調度器是如何解…

開源模型應用落地-讓AI更懂你的每一次交互-Mem0集成Qdrant、Neo4j與Streamlit的創新實踐(四)

一、前言 在人工智能迅速發展的今天,如何讓AI系統更懂“你”?答案或許藏在個性化的記憶管理之中。Mem0作為一個開源的記憶管理系統,正致力于為AI賦予長期記憶與個性化服務能力。通過結合高性能向量數據庫Qdrant、圖數據庫Neo4j的強大關系分析能力以及Streamlit的高效可視化交…

基于微信小程序的校園二手交易平臺、微信小程序校園二手商城源代碼+數據庫+使用說明,layui+微信小程序+Spring Boot

school-market 介紹 基于微信小程序的校園二手交易平臺 功能結構圖 軟件架構 系統分為三個端&#xff0c;分別是客戶端、管理端、服務端&#xff1b; 客戶端&#xff1a;使用原生微信小程序實現 管理端&#xff1a;使用Layui實現 服務端&#xff1a;使用Java SpringBoot…

IDEA與Gradle構建沖突,導致java重復類的解決方案

項目構建總是報錯&#xff1a;錯誤提示1&#xff1a;java:重復類或錯誤提示2&#xff1a;Internal error in the mapping processor: java.lang.RuntimeException: javax.annotation.processing.FilerException: Attempt to recreate a file排查發現build/generated/sources/an…

如何調節筆記本電腦亮度?其實有很多種方式可以調整亮度

長時間面對屏幕工作、學習或娛樂&#xff0c;很多人會感到眼睛干澀、疲勞&#xff0c;甚至出現視力下降等問題。其實&#xff0c;這些問題的背后&#xff0c;往往隱藏著一個看似簡單卻極易被忽視的設置—屏幕亮度。 合適的屏幕亮度不僅能提升視覺體驗&#xff0c;還能有效緩解…

國際數字影像產業園創作空間升級 打造更優質營商環境

國際數字影像產業園創作空間升級后表現顯著&#xff0c;聚焦設施數字化與用戶體驗優化。整體提升了創意生態系統的競爭力&#xff0c;有效吸引全球企業。 升級核心改進 基礎設施現代化&#xff1a;引入智能硬件如5G網絡和云渲染設備&#xff0c;支持高清影像處理&#xff0c;…

淺談 webshell 構造之如何獲取惡意函數

前言這篇文章主要是總結一下自己學習過的如何獲取惡意函數的篇章&#xff0c;重點是在如何獲取惡意函數get_defined_functions(PHP 4 > 4.0.4, PHP 5, PHP 7, PHP 8)get_defined_functions — 返回所有已定義函數的數組我們主要是可以通過這個獲取危險的函數比如比如當然還有…

Python 單例模式與魔法方法:深度解析與實踐應用

在 Python 編程領域,設計模式解決常見問題的通用方案,而魔法方法則是 Python 語言賦予類強大功能的特殊接口。單例模式和魔法方法看似獨立,實則緊密關聯,魔法方法常被用于實現單例模式。深入理解并熟練運用它們,能夠幫助開發者編寫出結構清晰、高效且具有高復用性的代碼。…

pybind11 導出 C++ map 在 Python 層 get 訪問慢的優化方案

pybind11 導出 C map 在 Python 層 get 訪問慢的優化方案 問題描述 通過 pybind11 導出 C 的 std::map 或 std::unordered_map&#xff0c;在 Python 代碼中頻繁使用 get 方法訪問 value 時&#xff0c;性能非常低下。其主要原因是&#xff1a; pybind11 的 map 綁定會導致每次…

RTC實時時鐘DS1339U-33國產替代FRTC1339M

FRTC1339M是一款實時時鐘&#xff08;RTC&#xff09;芯片&#xff0c;由NYFEA徠飛公司制造。 FRTC13399M串行實時時鐘是一種低功耗的時鐘日期設備&#xff0c;具有兩個可編程的每日時間警報和一個可編程的方波輸出。通過2線雙向總線進行串行地址和數據傳輸。時鐘/日期提供秒、…

網絡常用端口號歸納

ICMP端口號&#xff1a;1IGMP端口號&#xff1a;2TCP端口號&#xff1a;6UDP端口號&#xff1a;17FTP端口號&#xff1a;20(控制信息傳輸)、21&#xff08;數據傳輸&#xff09;SSH端口號&#xff1a;22Telnet端口號&#xff1a;23SMTP端口號&#xff1a;25IPV6端口號&#xff…

Agent learn

1.人物設定&#xff1a; 1.1塑造智能體的思維能力與問題拆解與拆解分析能力 1.2個性化&#xff1a;輸出預期輸出示例&#xff08;設定智能體的-》性格&#xff0c;語言風格&#xff09; 1.3插件&#xff0c;調用工具 1.4可設定結構化表達 1.5調優 1.6常見問題&#xff1a; …

五層協議介紹

層次核心功能典型協議/設備應用層為用戶應用程序提供網絡服務接口&#xff08;如文件傳輸、電子郵件、網頁瀏覽&#xff09;HTTP、FTP、SMTP、DNS、SSH傳輸層提供端到端的可靠或不可靠數據傳輸&#xff0c;處理流量控制和差錯恢復TCP&#xff08;可靠&#xff09;、UDP&#xf…

gin框架 中間件 是在判斷路由存在前執行還是存在后執行的研究

最近有個需求&#xff0c;就是發現我們的驗簽路由中間件會在判斷路由是否存在前執行。我們期望是gin框架先自己判斷路由中間件是否存在&#xff0c;存在了再走后面的中間件&#xff0c;不存在直接返回404.這樣能節省一定的資源。 研究了一下gin框架的源碼&#xff0c; 先說一下…

AGV 無人叉車關鍵技術問題解析:精準定位算法 / 安全避障邏輯 / 系統對接協議全方案

AGV無人叉車作為智能物流的核心裝備&#xff0c;在落地時常面臨定位漂移、系統兼容性差、避障失靈等痛點。本文深度解析5大高頻問題成因與解決方案&#xff0c;助企業規避運營風險&#xff0c;提升效率。 一、定位導航問題&#xff1a;行駛路徑偏移怎么辦&#xff1f; 1.典型…