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