OpenCV  4.10.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)
 计算栅格化形状的所有矩(最多 3 阶)。
 
int cv::cuda::numMoments (const MomentsOrder 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())
 计算栅格化形状的所有空间矩(最多 3 阶)。
 

枚举类型文档

#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 =

#include <opencv2/cudaimgproc.hpp>

计算栅格化形状的所有矩(最多 3 阶)。

该函数计算栅格化形状的矩,最高为 3 阶。结果在结构 cv::Moments 中返回。

参数
src光栅化图像(单通道 2D 阵列)。
binaryImage如果此值为 true,则所有非零图像像素都将被视为 1。
order要计算的最大矩的阶,而低阶矩需要更少的计算。
momentsType在计算矩时使用的精度。可用类型为 CV_32FCV_64FCV_32F 的性能大于 CV_64F 一个数量级。如果图像较小,则 CV_32F 得出的精度可以等于或非常接近于 CV_64F 的精度。
注意
要获得最大性能,请使用异步版本 cuda::spatialMoments(),因为该版本在内部分配和取消分配 GpuMatHostMem,以在设备上执行计算并下载结果到主机上。虽然无法避免代价高昂的 HostMem 分配,但可以使用 BufferPool 进行 GpuMat 设备分配,例如
setBufferPoolConfig(getDevice(), numMoments(order) * ((momentsType == CV_64F) ? sizeof(double) : sizeof(float)), 1);
#define CV_64F
定义 interface.h:79
int getDevice()
返回由 cuda::setDevice 设置或默认初始化的当前设备索引。
void setBufferPoolUsage(bool on)
BufferPool 管理(必须在创建流之前调用)
void setBufferPoolConfig(int 设备 ID,大小 t 堆栈大小,int 堆栈数量)
int numMoments(const MomentsOrder 顺序)
返回小于或等于最大图像矩顺序的图像矩数量。
有关示例,请参阅 opencv_contrib_source_code/modules/cudaimgproc/test/test_moments.cpp 中的CUDA_TEST_P(Moments, Accuracy) 测试。
返回
cv::Moments.
参见
cuda::spatialMomentscuda::convertSpatialMomentscuda::numMomentscuda::MomentsOrder

◆ numMoments()

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

#include <opencv2/cudaimgproc.hpp>

返回不大于最大图像矩阶数的图像矩数量。

参数
order要计算的最大矩的阶,而低阶矩需要更少的计算。
返回
图像矩数量。
参见
cuda::spatialMomentscuda::momentscuda::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>

计算栅格化形状的所有空间矩(最多 3 阶)。

异步版cuda::moments(),该版本只计算光栅化形状中的空间(非中心或非归一化)矩,并且最高阶数为 3。每个矩作为 1D moments 数组中的列条目返回。

参数
src光栅化图像(单通道 2D 阵列)。
[out]moments每个列条目包含一个图像空间矩的 1D 数组。
binaryImage如果此值为 true,则所有非零图像像素都将被视为 1。
order要计算的最大矩的阶,而低阶矩需要更少的计算。
momentsType在计算矩时使用的精度。可用类型为 CV_32FCV_64FCV_32F 的性能大于 CV_64F 一个数量级。如果图像较小,则 CV_32F 得出的精度可以等于或非常接近于 CV_64F 的精度。
stream异步版本的Stream
注意
为获得最大性能,预先分配一个正确类型和足够大小的 1D GpuMat 用于存储直到所需阶次的所有图像矩。例如:如果order === MomentsOrder::SECOND_ORDER_MOMENTSmomentsType == CV_32F,可以分配如下:
具有引用计数的 GPU 内存的基本存储类。
定义 cuda.hpp:106
#define CV_32F
定义 interface.h:78
@ SECOND_ORDER_MOMENTS
定义 cudaimgproc.hpp:798
中心矩和归一化矩可以通过下载数组并使用 cuda::convertSpatialMoments 辅助函数在主机上轻松计算。例如:
spatialMomentsDevice.download(spatialMomentsHostMem, stream);
stream.waitForCompletion();
Mat spatialMoments = spatialMomentsHostMem.createMatHeader();
cv::Moments cvMoments = convertSpatialMoments<float>(spatialMoments, order);
n 维密集数组类
定义 mat.hpp:812
结构由 cv::moments 返回
定义 types.hpp:960
用引用计数包裹 CUDA 中特殊内存类型分配函数的类。
定义 cuda.hpp:790
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())
计算栅格化形状的所有空间矩(最多 3 阶)。

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

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