【问题标题】:three-dimensional arrays in c++ with openCV带有openCV的c ++中的三维数组
【发布时间】:2014-07-10 07:30:29
【问题描述】:

我正在尝试做三维数组,但我的数组像 [92][112][200] 一样大。 我有其他方法来做 3D 数组以保持我的价值吗?或者我不知道我是否做错了什么。当我更改维度 [50][50][50] 的大小时,我没有这样的错误。

我的数组

尺寸 s=imageX.size();

int h = s.height;

int w = s.width;

双 ThreeD[w][h][feature]

我的第二个问题是:当我将 w 或 h 写入数组维度时,我有 error: Expression must have a constant value 我不能像这样写维度的大小吗?

【问题讨论】:

  • 这与opencv无关。
  • 向量向量的std::vector 怎么样?
  • 至于错误,消息应该是不言自明的。你不能使用非常量表达式作为数组的维度,因为 C++ 还没有variable length arrays
  • 动态分配需要使用new
  • 我有一张图片,我想也许有 openCV 的解决方案 也许我是 c++ 和 openCV 的新手 @Samuel

标签: c++ arrays opencv multidimensional-array


【解决方案1】:

你不能(不应该)声明一个像 3D 一样大小的数组。这个数组是在堆上分配的。相反,您应该使用operator new 分配它。 或者,您可以使用通道数作为第三维在 OpenCV 中创建 3D 矩阵。但请记住,cv::Mat 中的维数是有限的(如果我没记错的话,CV_MAX_CN =512)。下面是如何做到这一点(创建一个浮点类型的矩阵,用零填充):

cv::Mat m = cv::Mat::zeros(imageX.size(), CV_32FC(feature));

【讨论】:

  • 如果矩阵类型需要为double,那应该CV_64FC(feature)。 512 也是正确的,但它应该是 CV_CN_MAX 而不是 CV_MAX_CN。我以这种方式编写了 3D 矩阵,我认为这比尝试使用多维 Mat 更方便,如 berak 的回答。
【解决方案2】:

[编辑]:这个答案只是为了完整性。请改用@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&lt;Mat&gt;

vector<Mat> md(92,Mat(112,200,CV_32F));
                            

【讨论】:

    猜你喜欢
    • 2010-09-08
    • 1970-01-01
    • 1970-01-01
    • 2012-04-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-09
    • 1970-01-01
    相关资源
    最近更新 更多