当前位置: 首页 > article >正文

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

相关文章:

OpenCV CUDA模块结构分析与形状描述符------在 GPU 上计算图像的原始矩(spatial moments)函数spatialMoments()

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 该函数用于在 GPU 上计算图像的原始矩&#xff08;spatial moments&#xff09;。这些矩可用于描述图像中物体的形状特征&#xff0c;如面积、质…...

QT入门学习(一)---新建工程与、信号与槽

一: 新建QT项目 二:QT文件构成 2.1 first.pro 项目管理文件&#xff0c;下面来看代码解析 QT core guigreaterThan(QT_MAJOR_VERSION, 4): QT widgetsCONFIG c11TARGET main# The following define makes your compiler emit warnings if you use # any Qt feature …...

UE5.4.4+Rider2024.3.7开发环境配置

文章目录 一、UE5安装 安装有两种方式一种的源码编译安装、一种是EPIC安装&#xff0c;推荐后者&#xff0c;只需要注册一个EPIC账号就可以一键安装。 二、C环境安装 1.下载VisualStudioSetup 下载链接如下下载 Visual Studio Tools - 免费安装 Windows、Mac、Linux 选择社…...

Windows环境下PHP,在PowerShell控制台输出中文乱码

解决方法&#xff1a; 以管理员运行PowerShell , 输入&#xff1a; chcp 65001 重启控制台&#xff1b;然后就正常输出中文&#xff1b;...

第2篇:数据库连接池原理与自定义连接池开发实践

2.1 什么是数据库连接池&#xff1f; 数据库连接池&#xff08;Connection Pool&#xff09;是一种用于管理数据库连接对象的复用机制。它的主要目标是&#xff1a; 减少频繁创建/销毁连接的开销 提高系统对数据库资源的使用效率 支持连接复用、并发控制和连接健康检查 连接…...

性能优化 - 理论篇:性能优化的七类技术手段

文章目录 Pre引言性能优化的七类技术手段性能优化策略一览表1. 复用优化2. 计算优化2.1 并行执行2.2 变同步为异步2.3 惰性加载 3. 结果集优化3.1 数据格式与协议选择3.2 字段精简与按需返回3.3 批量处理与分页3.4 索引与位图加速 4. 资源冲突优化4.1 锁的分类与特点4.2 无锁与…...

华为IP(7)

端口隔离技术 产生的背景 1.以太交换网络中为了实现报文之间的二层隔离&#xff0c;用户通常将不同的端口加入不同的VLAN&#xff0c;实现二层广播域的隔离。 2.大型网络中&#xff0c;业务需求种类繁多&#xff0c;只通过VLAN实现二层隔离&#xff0c;会浪费有限的VLAN资源…...

AIGC与影视制作:技术革命、产业重构与未来图景

文章目录 一、AIGC技术全景&#xff1a;从算法突破到产业赋能1. **技术底座&#xff1a;多模态大模型的进化路径**2. **核心算法&#xff1a;从生成对抗网络到扩散模型的迭代** 二、AIGC在影视制作全流程中的深度应用1. **剧本创作&#xff1a;从“灵感枯竭”到“创意井喷”**2…...

spring-cloud-alibaba-sentinel-gateway

Spring Cloud Alibaba Sentinel Gateway 是阿里巴巴开源组件 Sentinel 与 Spring Cloud Gateway 的整合模块&#xff0c;主要用于在微服务架构中对网关层的流量进行控制、保护和监控。以下是它的详细说明&#xff1a; 一. 核心用途 网关层流量治理&#xff1a;在 API 网关&…...

Cursor 玩转 腾讯地图 MCP Server

腾讯地图WebService API 服务简介 腾讯地图WebService API 是基于HTTPS/HTTP协议构建的标准化地理数据服务接口。该接口支持跨平台调用&#xff0c;开发者可使用任意客户端、服务器端技术及编程语言&#xff0c;遵循API规范发起HTTPS请求&#xff0c;获取地理信息服务&#xf…...

【HarmonyOS 5】 ArkUI-X开发中的常见问题及解决方案

一、跨平台编译与适配问题 1. 平台特定API不兼容 ‌问题现象‌&#xff1a;使用Router模块的replaceUrl或startAbility等鸿蒙专属API时&#xff0c;编译跨平台工程报错cant support crossplatform application。 ‌解决方案‌&#xff1a; 改用ohos.router的跨平台封装API&a…...

2025年中国电商618年中大促策略分析:存量博弈与生态重构

图片来源&#xff1a;Photo by Samuel Regan-Asante on Unsplash 中国电商行业正经历一场从「增量扩张」到「存量深耕」的深刻转型。 随着网络购物用户规模突破9.74亿、线上消费渗透率逼近30%的临界点&#xff0c;传统流量红利逐渐消退&#xff0c;行业竞争已从「切蛋糕」转向…...

Deepseek给出的8255显示例程

#include <stdio.h> #include <conio.h> #include <dos.h>// 定义8255端口地址 (根据原理图译码确定) #define PORT_8255_A 0x8000 // PA端口地址 #define PORT_8255_B 0x8001 // PB端口地址 #define PORT_8255_C 0x8002 // PC端口地址 #define PORT_8255…...

React+Antd全局加载遮罩工具

下面是全局加载遮罩工具&#xff0c;功能&#xff1a;提供show和showWithDelay/hide方法用于显示/延时显示/隐藏遮罩&#xff0c;它还提供loading属性返回是否正在loading。通常用于耗时较长的操作&#xff0c;比如远端api调用。 如何用它&#xff0c;下面是个例子&#xff0c…...

Qt OpenGL 光照实现

Qt 中使用 OpenGL 实现光照效果主要基于 OpenGL 的光照模型和着色器编程。以下是 Qt OpenGL 光照实现的核心原理: 一. 光照模型基础 OpenGL 使用 Phong 光照模型,包含三个主要光照分量: 环境光(Ambient):场景中的基础光照,没有方向性 漫反射光(Diffuse):与表面法线和光…...

智汇云舟携最新无人机2D地图快速重建技术亮相广西国际矿业展览会

5月22至25日&#xff0c;广西国际矿业展览会&#xff08;以下简称 “矿业展”&#xff09;在南宁国际会展中心成功举办。智汇云舟与合作伙伴广西空驭数智信息技术有限公司携无人机 2D地图快速重建技术&#xff0c;以及视频孪生智慧矿山解决方案参会&#xff0c;为矿山行业数字化…...

Rust: CString、CStr和String、str

在FFI与C交互中&#xff0c;少不了与C中字符串交互。在Rust中&#xff0c;有 各种String存在的意义&#xff1a; OsString:因为要与操作系统等复杂的世界交互&#xff1b; 因为Rust世界中的Strings 始终是有效的 UTF-8。对于非 UTF-8 字符串&#xff0c;可以用到OsString。 CSt…...

力扣每日一题——连接两棵树后最大目标节点数目 ||

目录 题目链接&#xff1a;3373. 连接两棵树后最大目标节点数目 II - 力扣&#xff08;LeetCode&#xff09; 题目描述 解法一&#xff1a;​​双树贡献分离法​​ Java写法&#xff1a; C写法&#xff1a; 运行时间 时间复杂度和空间复杂度 总结 题目链接&#xff1a;…...

【学习笔记】Sparse Crosscoders for Cross-Layer Features and Model Diffing

Sparse Crosscoders for Cross-Layer Features and Model Diffing Abstract 本说明介绍了稀疏跨编码器(sparse crosscoders)&#xff0c;它是一种稀疏自编码器(sparse autoencoders)或transcoders的变体&#xff0c;旨在用于理解叠加中的模型结构。SAEs是在单一层中编码和预测…...

VSCode无法转到定义python源码(ctrl加单击不跳转)

已经尝试的方案&#xff1a; 1.确保对应python环境正确激活 在 VSCode 中&#xff0c;打开命令面板&#xff08;CtrlShiftP&#xff09;&#xff0c;输入并选择 Python: Select Interpreter&#xff0c;然后从列表中选择正确的 Python 解释器。 2.重新卸载Python插件再重新安装…...

【华为战报】4月、5月 HCIP考试战报!

了解更多往期考试→点 【考试战报】 华为认证 HCIP 4、5月微思 | HCIP 考试战报 学员成绩单 华为认证 最新开班 厦门面授 全国直播 新生代网工必看&#xff1a;华为模拟器eNSP安装教程&#xff08;附下载链接&#xff09;...

开发指南120-表格(el-table)斑马纹

el-table实现斑马纹简单否&#xff0c;看起来很简单&#xff0c;网上给的例子都是加stripe&#xff0c;例如 <el-table :data"tableData" stripe>连官网上的例子都是这样。然并卵。也许是版本问题。这么写&#xff0c;怎么折腾都没有效果。 必须这样写才行 …...

数字化转型全场景安全解析:从产品到管理的防线构建与实施要点

在数字化转型中&#xff0c;安全已从“可选配置” 升级为 “必需底座”&#xff0c;贯穿于产品生命周期、生产过程、供应链及管理决策全场景。以下从南京市场景清单出发&#xff0c;结合技术实践与政策要求&#xff0c;分析安全在各核心场景中的具体内涵与实施要点&#xff1a;…...

AIGC工具平台-GPT-SoVITS-v4-TTS音频推理克隆

声音克隆与语音合成的结合&#xff0c;是近年来生成式AI在多模态方向上的重要落地场景之一。随着预训练模型能力的增强&#xff0c;结合语音识别、音素映射与TTS合成的端到端系统成为初学者可以上手实践的全流程方案。 围绕 GPT-SoVITS-v4-TTS 模块&#xff0c;介绍了其在整合…...

el-table配置表头固定而且高度变化

根据官网提示只要在 el-table 元素中定义了 height 属性&#xff0c;即可实现固定表头的表格&#xff0c;而不需要额外的代码。 如果你想既要固定表头&#xff0c;又要下方表格高度自适应&#xff0c;可以设置为 height"100%" &#xff1a; 然后外层设置scroll:...

设计模式——组合设计模式(结构型)

摘要 组合设计模式是一种结构型设计模式&#xff0c;用于将对象组合成树形结构以表示“部分-整体”的层次结构&#xff0c;使客户端对单个对象和组合对象具有一致的访问方式。它包含抽象组件、叶子节点和组合节点&#xff0c;具有统一处理、支持递归结构和易扩展等优点&#x…...

PostgreSQL 在生物信息学中的应用

PostgreSQL&#xff08;简称PG&#xff09;是一种强大的开源关系型数据库管理系统&#xff0c;因其高可靠性、扩展性和支持复杂查询的特性&#xff0c;在生物信息学领域得到广泛应用。以下是其核心应用场景及优势分析&#xff1a; 一、生物数据存储与管理 生物信息学涉及海量…...

EMO2:基于末端执行器引导的音频驱动虚拟形象视频生成

今天带来EMO2&#xff08;全称End-Effector Guided Audio-Driven Avatar Video Generation&#xff09;是阿里巴巴智能计算研究院研发的创新型音频驱动视频生成技术。该技术通过结合音频输入和静态人像照片&#xff0c;生成高度逼真且富有表现力的动态视频内容&#xff0c;值得…...

计算机总线技术深度解析:从系统架构到前沿演进

计算机系统中的总线是连接多个部件的信息传输线&#xff0c;是各部件间传输信息的公共通道。以下将从总线的定义、功能、分类、性能指标等方面进行详细介绍&#xff1a; 一、总线的定义与功能 1.定义&#xff1a;总线是一组能为多个部件分时共享的公共信息传送线路&#xff0…...

Python打卡训练营Day43

DAY 43 复习日 作业&#xff1a; kaggle找到一个图像数据集&#xff0c;用cnn网络进行训练并且用grad-cam做可视化 数据集地址&#xff1a;Lung Nodule Malignancy 肺结核良恶性判断 进阶&#xff1a;并拆分成多个文件 import os import pandas as pd import numpy as np from…...