3
在OpenCV的,當我需要創建簡歷::墊,我需要做的事情沿着構建OpenCV的元素類型
cv::Mat new_mat(width, height, CV_32FC3)
行,如果我只知道會發生什麼,我需要的元素是float還是double +是否需要運行時的1/2/3通道?
換句話說,給定元素類型(float)和通道數(int),如何構造術語:CV_32FC3?
在OpenCV的,當我需要創建簡歷::墊,我需要做的事情沿着構建OpenCV的元素類型
cv::Mat new_mat(width, height, CV_32FC3)
行,如果我只知道會發生什麼,我需要的元素是float還是double +是否需要運行時的1/2/3通道?
換句話說,給定元素類型(float)和通道數(int),如何構造術語:CV_32FC3?
閱讀來源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的可怕類型安全。
我直接使用CV_MAKETYPE而不是短手。你的解決方案有效 – 2010-07-01 21:11:38
@Dat Chu:你如何找出只有每個元素的類型名稱的深度? (我試圖計算模板方法中的類型)。 – Renan 2011-07-14 07:16:31