OpenCV 4.12.0
开源计算机视觉
加载中...
搜索中...
无匹配项
结构分析与形状描述

详细描述

枚举

枚举  cv::cuda::MomentsOrder {
  cv::cuda::FIRST_ORDER_MOMENTS = 1 ,
  cv::cuda::SECOND_ORDER_MOMENTS = 2 ,
  cv::cuda::THIRD_ORDER_MOMENTS = 3
}
 图像矩的阶数。 更多...
 

函数

Moments cv::cuda::convertSpatialMoments (Mat spatialMoments, const MomentsOrder order, const int momentsType)
 将从 cuda::spatialMoments 返回的空间图像矩转换为 cv::Moments
 
Moments cv::cuda::moments (InputArray src, const bool binaryImage=false, const MomentsOrder order=MomentsOrder::THIRD_ORDER_MOMENTS, const int momentsType=CV_64F)
 计算栅格化形状的最高三阶矩。
 
int cv::cuda::numMoments (const MomentsOrder order)
 返回小于或等于最大图像矩 order 的图像矩数量。
 
void cv::cuda::spatialMoments (InputArray src, OutputArray moments, const bool binaryImage=false, const MomentsOrder order=MomentsOrder::THIRD_ORDER_MOMENTS, const int momentsType=CV_64F, Stream &stream=Stream::Null())
 计算栅格化形状的最高三阶空间矩。
 

枚举类型文档

◆ MomentsOrder

#include <opencv2/cudaimgproc.hpp>

图像矩的阶数。

参数
FIRST_ORDER_MOMENTS一阶矩
SECOND_ORDER_MOMENTS二阶矩。
THIRD_ORDER_MOMENTS三阶矩。
枚举器
FIRST_ORDER_MOMENTS 
SECOND_ORDER_MOMENTS 
THIRD_ORDER_MOMENTS 

函数文档

◆ convertSpatialMoments()

Moments cv::cuda::convertSpatialMoments ( Mat spatialMoments,
const MomentsOrder order,
const int momentsType )

#include <opencv2/cudaimgproc.hpp>

将从 cuda::spatialMoments 返回的空间图像矩转换为 cv::Moments

参数
spatialMomentscuda::spatialMoments 返回的空间矩。
order使用 cuda::spatialMoments 计算图像矩时使用的阶数。
momentsType使用 cuda::spatialMoments 计算图像矩时使用的精度。
返回
cv::Moments.
另请参见
cuda::spatialMoments, cuda::moments, cuda::convertSpatialMoments, cuda::numMoments, cuda::MomentsOrder

◆ moments()

Moments cv::cuda::moments ( InputArray src,
const bool binaryImage = false,
const MomentsOrder order = MomentsOrder::THIRD_ORDER_MOMENTS,
const int momentsType = CV_64F )

#include <opencv2/cudaimgproc.hpp>

计算栅格化形状的最高三阶矩。

此函数计算栅格化形状的最高三阶矩。结果在结构体 cv::Moments 中返回。

参数
src栅格图像(单通道2D数组)。
binaryImage如果为真,所有非零图像像素都视为1。
order要计算的最大矩的阶数,较低阶矩需要较少计算量。
momentsType计算矩时使用的精度。可用类型为 CV_32FCV_64F,其中 CV_32F 的性能比 CV_64F 高一个数量级。如果图像较小,CV_32F 的精度可以与 CV_64F 相当或非常接近。
注意
为了获得最高性能,请使用异步版本 cuda::spatialMoments(),因为此版本在内部会分配和释放 GpuMatHostMem,分别用于在设备上执行计算并将结果下载到主机。昂贵的 HostMem 分配无法避免,但 GpuMat 设备分配可以通过使用 BufferPool 来实现,例如:
setBufferPoolConfig(getDevice(), numMoments(order) * ((momentsType == CV_64F) ? sizeof(double) : sizeof(float)), 1);
#define CV_64F
Definition interface.h:79
int getDevice()
返回由 cuda::setDevice 设置或默认初始化的当前设备索引。
void setBufferPoolUsage(bool on)
BufferPool 管理(必须在 Stream 创建之前调用)
void setBufferPoolConfig(int deviceId, size_t stackSize, int stackCount)
int numMoments(const MomentsOrder order)
返回小于或等于最大图像矩阶数的图像矩数量。
有关示例,请参见 opencv_contrib_source_code/modules/cudaimgproc/test/test_moments.cpp 中的 CUDA_TEST_P(Moments, Accuracy) 测试。
返回
cv::Moments.
另请参见
cuda::spatialMoments, cuda::convertSpatialMoments, cuda::numMoments, cuda::MomentsOrder

◆ numMoments()

int cv::cuda::numMoments ( const MomentsOrder order)

#include <opencv2/cudaimgproc.hpp>

返回小于或等于最大图像矩 order 的图像矩数量。

参数
order要计算的最大矩的阶数,较低阶矩需要较少计算量。
返回
图像矩的数量。
另请参见
cuda::spatialMoments, cuda::moments, cuda::MomentsOrder

◆ spatialMoments()

void cv::cuda::spatialMoments ( InputArray src,
OutputArray moments,
const bool binaryImage = false,
const MomentsOrder order = MomentsOrder::THIRD_ORDER_MOMENTS,
const int momentsType = CV_64F,
Stream & stream = Stream::Null() )

#include <opencv2/cudaimgproc.hpp>

计算栅格化形状的最高三阶空间矩。

这是 cuda::moments() 的异步版本,仅计算栅格化形状的最高三阶空间矩(非中心或归一化矩)。每个矩都作为 1D moments 数组中的一个列条目返回。

参数
src栅格图像(单通道2D数组)。
[输出]moments一个1D数组,每个列条目包含一个空间图像矩。
binaryImage如果为真,所有非零图像像素都视为1。
order要计算的最大矩的阶数,较低阶矩需要较少计算量。
momentsType计算矩时使用的精度。可用类型为 CV_32FCV_64F,其中 CV_32F 的性能比 CV_64F 高一个数量级。如果图像较小,CV_32F 的精度可以与 CV_64F 相当或非常接近。
异步版本的 Stream
注意
为了获得最高性能,请预先分配一个1D的 GpuMat 作为 moments,其类型正确且大小足以存储所有图像矩,直至所需的 order。例如,当 orderMomentsOrder::SECOND_ORDER_MOMENTSmomentsTypeCV_32F 时,moments 可以按如下方式分配:
带引用计数的 GPU 内存的基本存储类。
定义 cuda.hpp:106
#define CV_32F
Definition interface.h:78
@ SECOND_ORDER_MOMENTS
定义 cudaimgproc.hpp:798
中心矩和归一化矩可以通过下载 moments 数组并使用 cuda::convertSpatialMoments 辅助函数在主机上轻松计算。例如:
spatialMomentsDevice.download(spatialMomentsHostMem, stream);
stream.waitForCompletion();
Mat spatialMoments = spatialMomentsHostMem.createMatHeader();
n 维密集数组类
定义 mat.hpp:830
cv::moments返回的结构体
定义 types.hpp:967
带引用计数的类,封装了CUDA中特殊内存类型的分配函数。
定义 cuda.hpp:799
void spatialMoments(InputArray src, OutputArray moments, const bool binaryImage=false, const MomentsOrder order=MomentsOrder::THIRD_ORDER_MOMENTS, const int momentsType=CV_64F, Stream &stream=Stream::Null())
计算栅格化形状的最高三阶空间矩。
Moments convertSpatialMoments(Mat spatialMoments, const MomentsOrder order, const int momentsType)
将从 cuda::spatialMoments 返回的空间图像矩转换为 cv::Moments。

有关示例,请参见 opencv_contrib_source_code/modules/cudaimgproc/test/test_moments.cpp 中的 CUDA_TEST_P(Moments, Async) 测试。

另请参见
cuda::moments, cuda::convertSpatialMoments, cuda::numMoments, cuda::MomentsOrder