我想做三维数组,但是我的数组太大了,像[92][112][200]。我有其他方法做3D数组来保持我的值吗?或者我不知道我是否做错了什么。当我更改维度[50][50][50]的大小时,没有出现这样的错误。
my array
大小s = imageX.size ();
int h = s;
font =宋体;
双ThreeD [w] [h][功能]
和我的第二个问题是:当我写w或h到我的数组维度我有错误:表达式必须有一个常量值我不能这样写维度的大小?
你不能(不应该)声明一个像3D这样的非常量大小的数组。这个数组在堆上分配。相反,应该使用operator new
来分配它。或者,您可以在OpenCV中使用通道数作为第三维度创建3D矩阵。但请记住,维数在cv::Mat中是有限的(如果我没记错的话,CV_MAX_CN =512)。下面是如何做到这一点(创建一个类型为float的矩阵,填充零):
cv::Mat m = cv::Mat::zeros(imageX.size(), CV_32FC(feature));
[edit]:这里的答案只是为了完整。请使用@remi的解决方案。
你可以在opencv中使用多维Mat:
int dims[3] = {92,112,200};
Mat m(3,dims,CV_32F);
cerr << m.size[0] << endl;
// note, you have to use the size *member*, not the function now,
// also, rows and cols will be invalid(-1)
但实际上,让你的生活更轻松,a和使用vector<Mat>
:
vector<Mat> md(92,Mat(112,200,CV_32F));