OpenCV CUDA模塊設備層-----創建一個“常量指針訪問器” 的工具函數constantPtr()

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

算法描述

在 CUDA 設備端模擬一個“指向常量值”的虛擬指針訪問器,使得你可以像訪問數組一樣訪問一個固定值。
這在某些核函數中非常有用,例如當你希望將一個標量值作為圖像或矩陣來使用時(如與卷積核、濾波器結合)。

函數原型

__host__ ConstantPtr<T> cv::cudev::constantPtr 	( 	T  	value	) 	

參數

  • value T 要封裝為常量訪問器的值。

使用場景舉例

  • 在 CUDA 核函數中將一個標量值當作“全圖常量圖像”使用;
  • 與 filter2D, convolve, 自定義卷積核等結合使用;
  • 簡化邏輯,統一接口:無論輸入是真實圖像還是常量圖像,都可調用相同的訪問器接口。

代碼示例


#include <opencv2/core/cuda.hpp>
#include <opencv2/cudev/ptr2d/constant.hpp>
#include <opencv2/opencv.hpp>
#include <iostream>using namespace cv::cudev;// 核函數:使用 constantPtr 訪問一個常量圖像
__global__ void fillKernel(const ConstantPtr<uchar> src,uchar* 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)return;// 無論坐標是什么,都返回常量值dst[y * width + x] = src(y, x);
}int main() {const int width = 640;const int height = 480;const uchar constantValue = 128;// 創建 GPU 圖像cv::cuda::GpuMat d_dst(height, width, CV_8UC1);// 使用 constantPtr 封裝一個常量值auto constAccessor = constantPtr(constantValue);dim3 block(16, 16);dim3 grid((width + block.x - 1) / block.x,(height + block.y - 1) / block.y);fillKernel<<<grid, block>>>(constAccessor, d_dst.ptr<uchar>(),width, height);// 下載結果cv::Mat h_dst;d_dst.download(h_dst);// 顯示圖像信息std::cout << "Image size: " << h_dst.size() << ", type: " << h_dst.type() << std::endl;std::cout << "First pixel value: " << static_cast<int>(h_dst.at<uchar>(0, 0)) << std::endl;// 保存圖像cv::imwrite("constant_image.png", h_dst);std::cout << "Saved image as 'constant_image.png'" << std::endl;return 0;
}

運行結果

Image size: [640 x 480], type: 0
First pixel value: 128
Saved image as 'constant_image.png'

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

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

相關文章

Python:操作 Excel 刪除工作簿

??親愛的技術愛好者們,熱烈歡迎來到 Kant2048 的博客!我是 Thomas Kant,很開心能在CSDN上與你們相遇~?? 本博客的精華專欄: 【自動化測試】 【測試經驗】 【人工智能】 【Python】 Python 操作 Excel 系列 讀取單元格數據按行寫入設置行高和列寬自動調整行高和列寬水平…

Python類型注解(Type Hints)的工程實踐指南

一、類型注解的核心價值 代碼可讀性&#xff1a;明確函數輸入輸出類型 靜態檢查&#xff1a;配合mypy提前發現類型錯誤 IDE支持&#xff1a;提升代碼補全和重構能力 文檔替代&#xff1a;類型即文檔的現代編程理念 二、基礎語法規范 def greet(name: str, times: int 1)…

Hadoop RPC 分層設計的哲學:高內聚、低耦合的最佳實踐

Hadoop RPC Hadoop RPC主要分為四個部分&#xff0c;分別是序列化層、函數調用層、網絡傳輸層和服務器端處理框架&#xff0c;實現機制為&#xff1a; 序列化層&#xff1a;主要作用是將結構化對象轉為字節流以便于通過網絡進行傳輸或寫入持久存儲。函數調用層&#xff1a;主…

MybatisPlus-01.MybatisPlus介紹

一.MybatisPlus介紹 MybatisPlus是對Mybatis的增強和升級&#xff0c;但需要注意的是&#xff0c;MybatisPlus并不是取代Mybatis的&#xff0c;而是要做Mybatis最好的合作伙伴。左邊藍色的小鳥就是MybatisPlus的標志。 在MybatisPlus官方頁面上介紹了其特點&#xff0c;首先&am…

人大金倉數據庫jdbc連接jar包kingbase8-8.6.0.jar驅動包最新版下載(不需要積分)

看了網上的很多&#xff0c;都是需要下載積分的 分享一下直接訪問人大金倉官網&#xff0c;下載對應的數據庫jdbc連接jar包kingbase8-8.6.0.jar驅動包&#xff1a; 點擊 服務與支持&#xff0c;然后選擇 下載中心 選擇對應的產品和版本&#xff0c;最后選擇軟件版本 看到有…

cf 禁止http/1.0和http/1.1的訪問 是否會更安全?

使用 Cloudflare&#xff08;CF&#xff09;禁止 HTTP/1.0 和 HTTP/1.1 的訪問&#xff0c;強制客戶端使用 HTTP/2 或更高版本&#xff08;如 HTTP/3&#xff09;&#xff0c;在某些情況下可以提升網站安全性&#xff0c;但也存在權衡和限制。以下是詳細分析&#xff0c;幫你判…

【Docker基礎】Docker容器管理:docker pause詳解

目錄 1 Docker容器管理概述 2 docker pause命令詳解 2.1 命令基本語法 2.2 命令功能解析 2.3 暫停與停止的區別 3 docker pause的工作流程 3.1 工作流程概述 3.2 工作流程詳解 4 docker pause的使用場景 4.1 資源臨時調整 4.2 調試與檢查 4.3 服務維護 4.4 數據備…

Springboot ResponseBodyAdvice 的小妙用

最近公司接觸到了政府項目&#xff0c;在開發完成后&#xff0c;需要對代碼做安全掃描&#xff0c;對系統做安全測試&#xff0c;在安全測試中有一項不合格&#xff0c;就是接口返回錯誤是&#xff0c;錯誤不是瀏覽器級別的&#xff0c;什么意思呢&#xff0c;一般我們都會封裝…

Re:從零開始的文件結構(融合線性表來理解 考研向)

文件管理 & 線性表 文件管理文件的結構無結構文件 有結構文件&#xff08;重點&#xff09;定長與不定長記錄順序文件&#xff08;類線性表&#xff09;它的邏輯結構它的物理結構&#xff08;存儲結構&#xff09;小結 索引順序文件與多級索引順序文件形象化理解&#xff0…

并發基礎7(守護線程)

目錄 1&#xff1a;什么守護線程 2&#xff1a;守護線程使用 3&#xff1a;守護線程案例 1&#xff1a;什么守護線程 守護線程是Java中的一種特殊的線程類型&#xff0c;它為其他線程&#xff08;非守護線程&#xff09;提供后臺支持服務。 在Java多線程編程中&#xff0c…

蜣螂算法+四模型對比!DBO-CNN-BiLSTM-Attention系列四模型多變量時序預測

蜣螂算法四模型對比&#xff01;DBO-CNN-BiLSTM-Attention系列四模型多變量時序預測&#xff08;Matlab完整源碼和數據&#xff09; 目錄 蜣螂算法四模型對比&#xff01;DBO-CNN-BiLSTM-Attention系列四模型多變量時序預測&#xff08;Matlab完整源碼和數據&#xff09;效果一…

服務器的維護技術都有哪些?

服務器的穩定性與可靠性是十分重要的&#xff0c;當服務器出現故障或損壞時&#xff0c;會影響業務的正常運行&#xff0c;還會導致數據丟失給企業帶來巨大的經濟損失&#xff0c;所以大多數的企業通常掌握著有效的服務器維護技術&#xff0c;不僅能夠提高服務器的穩定性&#…

Go 語言并發編程

Go 語言的并發模型是其區別于其他編程語言的重要特性之一&#xff0c;它以簡潔高效的方式解決了現代編程中多核處理器利用和高并發場景的需求。 一、并發與并行&#xff1a;概念與區別 在理解 Go 的并發模型之前&#xff0c;需要明確并發與并行的差異&#xff1a; 并發&…

基于Versoria函數優化協方差更新的改進擴展卡爾曼濾波(MVC-EKF)與經典EKF的對比,附matlab源代碼|訂閱專欄后可查看完整代碼

本代碼實現了基于Versoria函數優化協方差更新的改進擴展卡爾曼濾波(MVC-EKF),并與傳統擴展卡爾曼濾波(EKF)進行對比。代碼通過一維非線性運動模型仿真,展示了MVC-EKF在處理含異常值觀測數據時的魯棒性優勢,適用于目標跟蹤、導航定位等狀態估計場景。訂閱專欄后,可直接查…

使用Docker安裝MySQL和Nginx

在 Docker 中安裝 MySQL 和 Nginx 非常簡單&#xff0c;只需使用 docker run 命令即可快速部署。以下是詳細步驟&#xff1a; 1. 安裝 MySQL &#xff08;1&#xff09;拉取 MySQL 鏡像 docker pull mysql:8.0 # 推薦使用 8.0 或 5.7 版本&#xff08;2&#xff09;運行 MyS…

線上活動丨主動式語音 AI:全雙工、對話輪次管理、VAD 技術交流會丨RTE Meetup

一同探索語音驅動的下一代人機交互界面&#xff0c;voice agent builder 的小規模深度交流會。 當用戶走在街上時&#xff0c;AI 可以主動提醒他們注意未察覺的來車或騎行者&#xff0c;甚至推薦附近不為人知的特色咖啡館。 同樣&#xff0c;如果系統檢測到用戶持續表達消極情緒…

如何用內網穿透遠程訪問Everything?實現隨時隨地快速檢索文件

Everything 是一款高效的文件搜索工具&#xff0c;但默認僅支持局域網內使用。使用 花生殼&#xff08;內網穿透&#xff09;&#xff0c;我們可以實現遠程訪問Everything&#xff0c;在外網也能快速檢索和管理本地文件。 本教程將詳細介紹如何配置花生殼映射&#xff0c;并設…

Docker 入門教程(六):聯合文件系統(UnionFS)

文章目錄 &#x1f433; Docker 入門教程&#xff08;六&#xff09;&#xff1a;聯合文件系統&#xff08;UnionFS&#xff09;一、聯合文件系統&#xff08;UnionFS&#xff09;二、Docker 鏡像的層級結構三、寫層&#xff08;Copy-on-Write&#xff09;四、鏡像構建緩存機制…

SQL在一個表中所有列查詢某個值

使用場景&#xff1a;知道表名&#xff0c;同時知道這個表中含有某個字符串&#xff0c;但是不知道這個字符串是在表的哪些列&#xff0c;在列比較多的情況下&#xff0c;查詢很麻煩&#xff0c;通過以下語句或者封裝的存儲可以查出字符串在哪些列出現。結果集里 ContainsValue…

【Outline】純Docker部署指南

本文介紹了使用Docker部署Outline知識管理系統的完整流程。 主要內容包括&#xff1a; 部署PostgreSQL 12數據庫并創建用戶&#xff1b;安裝Redis 6緩存服務&#xff1b;配置Minio對象存儲服務替代AWS S3&#xff1b;搭建SSO單點登錄服務器&#xff1b;準備Outline容器鏡像和環…