Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/144.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 在运行时构造OpenCV元素类型_C++_Opencv - Fatal编程技术网

C++ 在运行时构造OpenCV元素类型

C++ 在运行时构造OpenCV元素类型,c++,opencv,C++,Opencv,在OpenCV中,当我需要创建cv::Mat时,我需要按照 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_MA

在OpenCV中,当我需要创建cv::Mat时,我需要按照

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))

我还没有测试过这个;让我知道它是否有效。另外:我讨厌opencv糟糕的字体安全性。

我直接使用CV\u MAKETYPE而不是速记。你的解决方案是有效的。@Dat Chu:如果只有每个元素的类型名,你如何找出深度?(我试图用模板方法计算类型)。
bool isdouble;
int nchannels;
// ...
if (isdouble) typeflag = CV_64FC(nchannels);
else typeflag = CV_32FC(nchannels);