2010-06-26 53 views
3

在OpenCV的,當我需要創建簡歷::墊,我需要做的事情沿着構建OpenCV的元素類型

cv::Mat new_mat(width, height, CV_32FC3) 

行,如果我只知道會發生什麼,我需要的元素是float還是double +是否需要運行時的1/2/3通道?

換句話說,給定元素類型(float)和通道數(int),如何構造術語:CV_32FC3?

回答

5

閱讀來源cxtypes.h。它包含像線執行以下操作:

#define CV_32FC1 CV_MAKETYPE(CV_32F,1) 
#define CV_32FC2 CV_MAKETYPE(CV_32F,2) 
#define CV_32FC3 CV_MAKETYPE(CV_32F,3) 
#define CV_32FC4 CV_MAKETYPE(CV_32F,4) 
#define CV_32FC(n) CV_MAKETYPE(CV_32F,(n)) 

#define CV_64FC1 CV_MAKETYPE(CV_64F,1) 
#define CV_64FC2 CV_MAKETYPE(CV_64F,2) 
#define CV_64FC3 CV_MAKETYPE(CV_64F,3) 
#define CV_64FC4 CV_MAKETYPE(CV_64F,4) 
#define CV_64FC(n) CV_MAKETYPE(CV_64F,(n)) 

CV_MAKETYPE定義爲:

#define CV_MAKETYPE(depth,cn) (CV_MAT_DEPTH(depth) + (((cn)-1) << CV_CN_SHIFT)) 

這表明以下代碼:

bool isdouble; 
int nchannels; 
// ... 
if (isdouble) typeflag = CV_64FC(nchannels); 
else typeflag = CV_32FC(nchannels); 

我沒有測試此;讓我知道它是否有效。另外:我討厭opencv的可怕類型安全。

+0

我直接使用CV_MAKETYPE而不是短手。你的解決方案有效 – 2010-07-01 21:11:38

+0

@Dat Chu:你如何找出只有每個元素的類型名稱的深度? (我試圖計算模板方法中的類型)。 – Renan 2011-07-14 07:16:31