OpenCV CUDA模塊結構分析與形狀描述符------在 GPU 上計算圖像的原始矩(spatial moments)函數spatialMoments()

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

算法描述

該函數用于在 GPU 上計算圖像的原始矩(spatial moments)。這些矩可用于描述圖像中物體的形狀特征,如面積、質心等。

與 cv::cuda::moments(…) 不同的是,這個函數將結果寫入一個 OutputArray 中,而不是返回結構體。因此它更適合需要手動處理矩數組的應用場景。

參數

參數名類型描述
srcInputArray輸入圖像,支持 CV_8U, CV_16U, 或 CV_32S 類型,單通道圖像。如果 binaryImage 為 true,則應為二值圖像(前景非零,背景為零)。
momentsOutputArray輸出矩數組,是一個一維數組,長度由 order 決定(見下文),數據類型由 momentsType 指定。
binaryImageconst bool如果為 true,則假設輸入圖像是二值圖像;否則按灰度圖處理。默認為 false。
orderconst MomentsOrder要計算的矩的最大階數,可選:
- FIRST_ORDER_MOMENTS:僅計算到一階矩(共 4 個矩)
- SECOND_ORDER_MOMENTS:計算到二階矩(共 9 個矩)
- THIRD_ORDER_MOMENTS:計算到三階矩(共 16 個矩)
momentsTypeconst int矩的數據類型,通常為 CV_64F(雙精度浮點數),也可以是 CV_32F。
streamStream&可選的 CUDA 流對象,用于異步執行。默認為同步執行(Stream::Null())。

注意:

為了獲得最佳性能,請預先分配一個一維 GpuMat 用于存儲矩(moments),其類型和大小必須足以容納指定階數下的所有圖像矩。

例如:當 order == MomentsOrder::SECOND_ORDER_MOMENTS 且 momentsType == CV_32F 時,可以這樣分配:

GpuMat momentsDevice(1, numMoments(MomentsOrder::SECOND_ORDER_MOMENTS), CV_32F);

下載矩數組后,可以在主機端使用 cv::Moments 構造函數輕松地計算中心矩(central moments)和歸一化矩(normalized moments)。例如:

HostMem momentsHostMem(1, numMoments(MomentsOrder::SECOND_ORDER_MOMENTS), CV_32F);
momentsDevice.download(momentsHostMem, stream);
stream.waitForCompletion();
Mat momentsMat = momentsHostMem.createMatHeader();
cv::Moments cvMoments(momentsMat.at<float>(0), momentsMat.at<float>(1),momentsMat.at<float>(2), momentsMat.at<float>(3),momentsMat.at<float>(4), momentsMat.at<float>(5),momentsMat.at<float>(6), momentsMat.at<float>(7),momentsMat.at<float>(8), momentsMat.at<float>(9)
);

示例詳見 OpenCV 貢獻模塊源碼中的測試文件:
opencv_contrib_source_code/modules/cudaimgproc/test/test_moments.cpp 中的 CUDA_TEST_P(Moments, Async) 測試用例

返回值

無返回值。矩的結果通過 moments 參數輸出。

代碼示例

#include <opencv2/opencv.hpp>
#include <opencv2/cudaimgproc.hpp>
#include <iostream>int main()
{// 加載圖像cv::Mat h_src = cv::imread("/media/dingxin/data/study/OpenCV/sources/images/Lenna.png", cv::IMREAD_GRAYSCALE);if (h_src.empty()){std::cerr << "無法加載圖像!" << std::endl;return -1;}// 上傳圖像到 GPUcv::cuda::GpuMat d_src;d_src.upload(h_src);// 獲取最大階數下的矩數量int nMoments = cv::cuda::numMoments(cv::cuda::MomentsOrder::THIRD_ORDER_MOMENTS);// 創建輸出矩陣cv::cuda::GpuMat d_moments;d_moments.create(1, nMoments, CV_64F);  // 存儲所有矩值// 計算空間矩cv::cuda::spatialMoments(d_src, d_moments, false, cv::cuda::MomentsOrder::THIRD_ORDER_MOMENTS);// 下載結果cv::Mat h_moments;d_moments.download(h_moments);// 打印結果std::cout << "原始矩(spatial moments):" << std::endl;for (int i = 0; i < h_moments.cols; ++i){std::cout << "Moment[" << i << "] = " << h_moments.at<double>(i) << std::endl;}return 0;
}

運行結果

原始矩(spatial moments):
Moment[0] = 3.4715e+07
Moment[1] = 9.17605e+09
Moment[2] = 8.59234e+09
Moment[3] = 3.17604e+12
Moment[4] = 2.31525e+12
Moment[5] = 2.88234e+12
Moment[6] = 1.22333e+15
Moment[7] = 8.11918e+14
Moment[8] = 7.81631e+14
Moment[9] = 1.09583e+15

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

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

相關文章

Nacos實戰——動態 IP 黑名單過濾

1、需求分析 一些惡意用戶&#xff08;?可能是黑客、爬蟲、DDoS ?攻擊者&#xff09;可能頻繁請求服務器資?源&#xff0c;導致資源占用過高。針對這種問題&#xff0c;可以通過IP? 封禁&#xff0c;可以有效拉?黑攻擊者&#xff0c;防止資源?被濫用&#xff0c;保障合法…

opencv + jpeg_turbo(啟用SIMD加速)

背景 opencv的imreadimwrite耗時過大 一張5M的圖片讀用了140ms,寫一張1.7M的圖片用149ms 平臺&#xff1a;mingw64編譯Windows程序版本&#xff1a;opencv4.5.4 加速方案 opencv啟用openmpopencv啟用jpeg_turbojpeg_turbo啟動SIMD加速 下載jpeg_turbo源碼 opencv源碼自帶…

Redis 主從節點

Redis 主從節點的核心區別 特性主節點 (Master)從節點 (Slave/Replica)讀寫權限可讀可寫只讀&#xff08;默認配置&#xff09;數據流向數據來源從主節點同步數據連接關系可連接多個從節點只能連接一個主節點故障切換故障時需要手動/自動提升從節點可被提升為新的主節點命令執…

汽車安全:功能安全FuSa、預期功能安全SOTIF與網絡安全Cybersecurity 解析

汽車安全的三重防線&#xff1a;深入解析FuSa、SOTIF與網絡安全技術 現代汽車已成為裝有數千個傳感器的移動計算機&#xff0c;安全挑戰比傳統車輛復雜百倍。 隨著汽車智能化、網聯化飛速發展&#xff0c;汽車電子電氣架構已從簡單的分布式控制系統演變為復雜的移動計算平臺。現…

github好玩的工具

以下是 GitHub 上一些有趣且實用的開源工具推薦,涵蓋 AI 應用、效率提升、趣味開發等方向,結合最新趨勢和項目熱度整理: 一、AI 與深度偽造工具 Deep-Live-Cam 僅需一張圖片即可在視頻直播中實時替換人臉,適用于內容創作和虛擬角色開發,支持多平臺硬件運行(如 NVIDIA CUD…

Python應用for循環臨時變量作用域

大家好!如果你剛開始學習Python&#xff0c;可能會對for循環中臨時變量的作用域感到好奇。下面通過一個簡單的練習&#xff0c;幫助你理解這個概念。 代碼呈現: i 0 for i in range(5):print(i)print(i)代碼介紹: 首先我們初始化變量i 0然后進入for循環&#xff0c;這里i成為…

深度學習---負樣本訓練

一、負樣本的本質與核心作用 1. 定義與范疇 負樣本&#xff08;Negative Sample&#xff09;是與目標樣本&#xff08;正樣本&#xff09;在語義、特征或任務目標上存在顯著差異的樣本。其核心價值在于通過對比學習引導模型學習樣本間的判別性特征&#xff0c;而非僅記憶正樣本…

實驗設計與分析(第6版,Montgomery)第3章單因子實驗:方差分析3.11思考題3.7 R語言解題

本文是實驗設計與分析&#xff08;第6版&#xff0c;Montgomery著&#xff0c;傅玨生譯) 第3章單因子實驗&#xff1a;方差分析3.11思考題3.7 R語言解題。主要涉及單因子方差分析&#xff0c;正態性假設檢驗&#xff0c;殘差與擬合值的關系圖&#xff0c;平方根變換。 X<-c(…

【PhysUnits】15.8 引入P1后的減法運算(sub.rs)

一、源碼 這段代碼實現了一個類型級別的二進制數減法系統&#xff0c;包含標準減法和帶借位減法。 use core::ops::{Neg, Not, Sub}; use super::basic::{Z0, N1, P1, B0, B1, Integer, NonZero}; use super::add1::Add1; use super::sub1::Sub1; use super::standardization…

npm install命令都做了哪些事情

npm install&#xff08;或其簡寫 npm i&#xff09;是 Node.js 項目中最重要的命令之一&#xff0c;它負責安裝項目所需的所有依賴項。下面我將詳細解釋這個命令的完整執行過程和底層機制&#xff0c;讓你徹底理解它背后的工作原理。 一、npm install 的完整工作流程 1. 依賴…

mkdir: cannot create directory ‘gitlab-stu’: No space left on device

Linux中創建目錄時報錯“mkdir: cannot create directory ‘gitlab-stu’: No space left on device”&#xff0c;磁盤空間不足。 使用df命令查看&#xff0c;發現 / 下面use%占滿了&#xff1a; 查看inode使用情況&#xff1a; 可以看到docker的數據大部分存放在/var/lib/do…

中國高分辨率高質量地面NO2數據集(2008-2023)

時間分辨率&#xff1a;日空間分辨率&#xff1a;1km - 10km共享方式&#xff1a;開放獲取數據大小&#xff1a;15.36 GB數據時間范圍&#xff1a;2008-01-01 — 2023-12-31元數據更新時間&#xff1a;2024-08-19 數據集摘要 ChinaHighNO2數據集是中國高分辨率高質量近地表空氣…

Redis實戰-基于redis和lua腳本實現分布式鎖以及Redission源碼解析【萬字長文】

前言&#xff1a; 在上篇博客中&#xff0c;我們探討了單機模式下如何通過悲觀鎖&#xff08;synchronized&#xff09;實現"一人一單"功能。然而&#xff0c;在分布式系統或集群環境下&#xff0c;單純依賴JVM級別的鎖機制會出現線程并發安全問題&#xff0c;因為這…

剪枝中的 `break` 與 `return` 區別詳解

在回溯算法的剪枝操作中&#xff1a; if (sum candidates[i] > target) break;這個 break 既不等效于 return&#xff0c;也不會終止整個回溯過程。它只會終止當前層循環的后續迭代&#xff0c;而不會影響其他分支的回溯。讓我用圖解和示例詳細說明&#xff1a; &#x1…

計算機網絡第1章(下):網絡性能指標與分層模型全面解析

目錄 一、計算機網絡的性能指標1.1 性能指標1&#xff1a;速率1.2 性能指標2&#xff1a;帶寬1.3 性能指標3&#xff1a;吞吐量1.4 性能指標4&#xff1a;時延1.5 性能指標5&#xff1a;時延帶寬積1.6 性能指標6&#xff1a;往返時延1.7 性能指標7&#xff1a;信道利用率 二、計…

C#數字圖像處理(二)

文章目錄 1.灰度直方圖1.1 灰度直方圖定義1.2 灰度直方圖編程實例 2.線性點運算2.1線性點運算定義2.2 線性點運算編程實例 3.全等級直方圖灰度拉伸3.1 灰度拉伸定義3.2 灰度拉伸編程實例 4.直方圖均衡化4.1 直方圖均衡化定義4.2 直方圖均衡化編程實例 5.直方圖匹配5.1 直方圖匹…

訓練中常見的運動強度分類

概述 有氧運動是耐力基礎&#xff0c;乳酸閾值是耐力突破的關鍵&#xff0c;提升乳酸閾值可以延緩疲勞&#xff0c;無氧運動側重速度和力量&#xff0c;混氧和最大攝氧量用于細化訓練強度和評估潛力。 分類強度供能系統乳酸濃度訓練目標有氧運動低&#xff08;60%-80% HR&…

數智管理學(十五)

第五章 數智化時代的組織結構模型 第一節 傳統金字塔型結構向分布式網絡型的演變 在當今數智化時代&#xff0c;企業所處的市場環境發生了翻天覆地的變化&#xff0c;技術創新日新月異&#xff0c;客戶需求日益多樣化和個性化&#xff0c;市場競爭愈發激烈。傳統的金字塔型組…

AAA基礎配置

文章目錄 組網需求組網拓撲實驗步驟測試結果配置文件 組網需求 為組網安全&#xff0c;經常會使用AAA技術&#xff0c;本次以CE12800交換機Window為例&#xff0c;實現AAA本地認證登錄 組網拓撲 實驗步驟 配置接口IP&#xff0c;連通終端進入AAA視圖配置用戶名密碼配置賬戶權…

基于微信小程序的云校園信息服務平臺設計與實現(源碼+定制+開發)云端校園服務系統開發 面向師生的校園事務小程序設計與實現 融合微信生態的智慧校園管理系統開發

博主介紹&#xff1a; ?我是阿龍&#xff0c;一名專注于Java技術領域的程序員&#xff0c;全網擁有10W粉絲。作為CSDN特邀作者、博客專家、新星計劃導師&#xff0c;我在計算機畢業設計開發方面積累了豐富的經驗。同時&#xff0c;我也是掘金、華為云、阿里云、InfoQ等平臺…