OpenCV CUDA模塊設備層-----像素值進行逐通道的最大值比較函數max()

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

算法描述

是 OpenCV 的 CUDA 模塊(cv::cudev) 中的一個 設備端內聯函數(device function),用于在 CUDA 核函數中對兩個 uchar1 類型像素值進行逐通道的最大值比較。
對兩個 uchar1 類型變量(即單通道無符號字符類型)進行逐通道比較,返回每個通道中的最大值。
由于 uchar1 是單通道數據類型(等價于 unsigned char),因此這個函數實際上就是返回 a 和 b 中較大的那個值。
它通常用于圖像處理中實現 像素級最大值濾波、圖像融合、閾值操作等 GPU 加速場景。

函數原型

__device__ __forceinline__ uchar1 cv::cudev::max 	( 	const uchar1 &  	a,const uchar1 &  	b ) 		

參數

  • a const uchar1& 第一個輸入像素值
  • b const uchar1& 第二個輸入像素值

返回值

  • 返回一個新的 uchar1 值,表示 a 和 b 的最大值。
  • 因為是單通道類型,所以直接返回 max(a.x, b.x)。

代碼


#include <opencv2/cudaimgproc.hpp>
#include <opencv2/highgui.hpp>
#include <opencv2/cudev/util/vec_math.hpp>using namespace cv;
using namespace cv::cudev;// CUDA 核函數:取兩個圖像像素的最大值
template <typename Ptr1, typename Ptr2, typename DstPtr>
__global__ void maxKernel(Ptr1 src1, Ptr2 src2, DstPtr 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) {// 獲取兩個圖像的像素值uchar1 val1 = src1(y, x);uchar1 val2 = src2(y, x);// 取最大值并寫入輸出圖像dst(y, x) = max(val1, val2);}
}int main() {// 加載兩張圖像(假設尺寸相同)Mat h_img1 = imread("/media/dingxin/data/study/OpenCV/sources/images/img0.jpg", IMREAD_GRAYSCALE);Mat h_img2 = imread("/media/dingxin/data/study/OpenCV/sources/images/img1.jpg", IMREAD_GRAYSCALE);if (h_img1.empty() || h_img2.empty()) {std::cerr << "Failed to load images!" << std::endl;return -1;}// 上傳到 GPUcuda::GpuMat d_img1, d_img2, d_result;d_img1.upload(h_img1);d_img2.upload(h_img2);d_result.create(d_img1.size(), d_img1.type());// 構造 PtrStepSz 訪問器auto ptr1 = PtrStepSz<uchar1>(d_img1);auto ptr2 = PtrStepSz<uchar1>(d_img2);auto dptr = PtrStepSz<uchar1>(d_result);// 設置核函數參數dim3 block(16, 16);dim3 grid((d_img1.cols + block.x - 1) / block.x,(d_img1.rows + block.y - 1) / block.y);// 調用核函數maxKernel<<<grid, block>>>(ptr1, ptr2, dptr, d_img1.cols, d_img1.rows);cudaDeviceSynchronize();// 下載結果并顯示Mat h_result;d_result.download(h_result);imshow("Max Image", h_result);waitKey(0);return 0;
}

運行結果

在這里插入圖片描述

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

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

相關文章

SCSAI萬物對象模型和五維市場交易平臺原型

一個完整的工業軟件對象模型平臺&#xff0c;基于SCSAI對象模型和五維市場理論。該平臺包含對象管理、五維市場交易和大模型集成功能。 工業軟件對象模型平臺功能說明 這個平臺實現了基于Aras Innovator對象模型和五維市場理論的工業軟件解決方案&#xff0c;主要功能包括&…

昇騰のPrefix Cache

Prefix Cache特性介紹 Prefix Cache 即前綴緩存&#xff0c;是一種用于優化大語言模型&#xff08;LLM&#xff09;推理性能的技術&#xff0c;主要應用于多輪對話、系統提示等具有大量共同前綴的場景。 原理 LLM 推理計算主要包括 Prefill 階段&#xff08;Prompt 計算&…

12-C#的list數據使用

C#的list數據使用 1.實例化 List<double> lst1 new List<double>();2.數據清除 lst1 .Clear();3.數據清除

SQL數據遷移利器:INSERT INTO SELECT語句詳解

引言 在數據庫操作中&#xff0c;我們經常需要將一個表中的數據遷移或復制到另一個表中。這時候&#xff0c;INSERT INTO SELECT語句就成為了一個極其有用的工具。今天我們就來深入探討這個強大的SQL語句。 基本語法 INSERT INTO 目標表(字段1, 字段2, ...) SELECT 字段1, 字…

elementUI輪播圖組件el-carousel適配移動端大小(圖片加載好后根據大小適配)

獲取img實例&#xff0c;動態設置el-carousel高度 <template><div class"content main"><el-carousel arrow"always" :height"bannerHeight px"><el-carousel-item v-for"(item, index) in banners" :key"…

AI歌手Yuri出道:GenAI,透露著新的AI產業機遇?

名人說&#xff1a;博觀而約取&#xff0c;厚積而薄發。——蘇軾《稼說送張琥》 創作者&#xff1a;Code_流蘇(CSDN)&#xff08;一個喜歡古詩詞和編程的Coder&#x1f60a;&#xff09; 目錄 一、AI歌手Yuri橫空出世1. 爆紅的原生MV《SURREAL》2. 背后的創作團隊 二、AI歌手背…

常見的自動化測試工具,好學嗎?

自動化測試是把以人為驅動的測試行為轉化為機器執行的一種過程。它通常涉及預設測試用例&#xff0c;并通過自動化工具或腳本來執行這些用例&#xff0c;最后比較實際結果與期望結果來評估軟件的正確性。 常見的自動化測試工具包括Selenium、Appium、JMeter、LoadRunner、Post…

JavaEE初階第四期:解鎖多線程,從 “單車道” 到 “高速公路” 的編程升級(二)

專欄&#xff1a;JavaEE初階起飛計劃 個人主頁&#xff1a;手握風云 目錄 一、Thread類及常用方法 2.1. Thread的常見構造方法 2.2. Thread的常見屬性 2.3. 啟動一個線程 2.4. 中斷一個線程 2.5. 等待一個線程 2.6. 休眠當前線程 一、Thread類及常用方法 2.1. Thread的…

elk+filebeat收集springboot項目日志

目錄 步驟 1: 安裝和配置Elasticsearch 步驟 2: 安裝和配置Logstash&#xff08;可選&#xff09; 步驟 3: 安裝和配置Filebeat 步驟 4: 安裝和配置Kibana 要使用ELK&#xff08;Elasticsearch, Logstash, Kibana&#xff09;堆棧和Filebeat來收集Spring Boot項目的日志&am…

基于Python實現(控制臺)UDP傳輸協議的可靠文件傳輸工具

LFTP Design 簡介 LFTP是一個采用python3實現的基于UDP傳輸協議的可靠文件傳輸工具 特點 基于UDP 采用python3編程語言&#xff0c;socket的類型均為socket(AF_INET,SOCK_DGRAM)實現 實現100%可靠性傳輸 使用SR&#xff08;選擇重傳&#xff09;協議保證所有報文都正確接收…

【Go-7】面向對象編程

7. 面向對象編程 面向對象編程&#xff08;Object-Oriented Programming&#xff0c;簡稱OOP&#xff09;是一種編程范式&#xff0c;通過將數據和行為封裝在對象中&#xff0c;以提高代碼的可重用性、可維護性和擴展性。雖然Go語言不像傳統的OOP語言&#xff08;如Java、C&am…

PHP語法基礎篇(六):數組

PHP 中的數組實際上是一個有序映射。映射是一種把 values 關聯到 keys 的類型。此類型針對多種不同用途進行了優化&#xff1b;它可以被視為數組、列表&#xff08;向量&#xff09;、哈希表&#xff08;映射的實現&#xff09;、字典、集合、堆棧、隊列等等。本篇文章將記錄數…

GitHub Actions 的深度解析與概念介紹

GitHub Actions 核心定義 Git Actions 是 GitHub 原生提供的 自動化工作流引擎&#xff0c;允許開發者在代碼倉庫中直接創建、測試、部署代碼。其本質是通過事件驅動&#xff08;Event-Driven&#xff09;的自動化管道&#xff0c;將軟件開發中的重復任務抽象為可編排的流程。…

TestCafe 全解析:免費開源的 E2E 測試解決方案實戰指南

在2025年的數字化浪潮中&#xff0c;Web應用的穩定性和用戶體驗成為企業競爭的關鍵&#xff0c;而端到端&#xff08;E2E&#xff09;測試則是確保質量的“守護者”&#xff01;想象一下&#xff0c;您的電商平臺因表單錯誤導致用戶流失&#xff0c;或者支付流程因瀏覽器兼容性…

[CVPR 2025] 高效無監督Prompt與偏好對齊驅動的半監督醫學分割

CVPR 2025 | 優化SAM&#xff1a;高效無監督Prompt與偏好對齊驅動的半監督醫學分割 論文信息 標題&#xff1a;Enhancing SAM with Efficient Prompting and Preference Optimization for Semi-supervised Medical Image Segmentation作者&#xff1a;Aishik Konwer, Zhijian…

【C++】責任鏈模式

目錄 一、模式核心概念與結構二、C++ 實現示例:員工請假審批系統三、責任鏈模式的關鍵特性四、應用場景五、責任鏈模式與其他設計模式的關系六、C++ 標準庫中的責任鏈模式應用七、優缺點分析八、實戰案例:Web 請求過濾器鏈九、實現注意事項如果這篇文章對你有所幫助,渴望獲得…

dp進階,樹形背包(dfs+01)

顧名思義&#xff0c;就是在對樹進行搜索的時候&#xff0c;由于限制了子節點選根節點必選和節點數限制&#xff0c;所以需要額外利用背包來維護最大值 假設根節點就是0&#xff0c;我們很容易 發現&#xff0c;這就是一個正常的樹求和&#xff0c;但是限制了節點數量&#xf…

微信小程序安卓手機輸入框文字飄出輸入框

最近在開發微信小程序遇到一個問題&#xff0c;安卓手機輸入框文字飄出輸入框&#xff0c;但是ios系統的手機則正常。 使用情景&#xff1a;做了一個彈窗&#xff0c;彈窗內是表單&#xff0c;需要填寫一些信息&#xff0c;但是在填寫信息時光標不顯示&#xff0c;輸入的內容飄…

3 大語言模型預訓練數據-3.2 數據處理-3.2.2 冗余去除——3.后綴數組(Suffix Array)在大模型數據去重中的原理與實戰

后綴數組&#xff08;Suffix Array&#xff09;在大模型數據去重中的原理與實戰 一、后綴數組的核心原理與數據結構二、后綴數組去重的核心流程1. **文檔預處理與合并**2. **構建后綴數組**3. **計算最長公共前綴&#xff08;LCP&#xff09;數組**4. **基于LCP檢測重復文檔** …

數據庫外連接詳解:方式、差異與關鍵注意事項

&#x1f504; 數據庫外連接詳解&#xff1a;方式、差異與關鍵注意事項 外連接用于保留至少一個表的全部行&#xff0c;即使另一表無匹配記錄。以下是三種外連接方式的深度解析&#xff1a; &#x1f50d; 一、外連接的三種類型 1. 左外連接 (LEFT OUTER JOIN) 作用&#xf…