像MATLAB一样的C ++ 2D增长数组

时间:2011-03-18 19:32:34

标签: c++ arrays matlab

我在C中读过一些关于动态增长数组的帖子,但是我看不出如何创建2D增长数组(就像在MATLAB中一样)。

我有一个函数为一些图像处理构造一个数组,但我不知道这个数组的大小(cols和rows)。我该如何创建呢?

我读了一些关于malloc和realloc的内容。这些功能是可移植的或对此问题有用。

编辑:已解决,使用Armadillo library,一个C ++线性代数库。

5 个答案:

答案 0 :(得分:1)

如果您正在进行图像处理,则可能需要使用matrix中的opencv和数组类型。

答案 1 :(得分:1)

最简单的是指针

int nrows = 10;
int ncols = 5;

double* matrix = new double[mrows*ncols];

然后您可以像访问2D数组like一样访问它。

所以,如果你想要matrix[row][col],你可以做

int offset = row*ncols+col;
double value = matrix[offset];

另外,如果你想在C ++中像Matlab一样舒适,请查看Armadillo

答案 2 :(得分:0)

通过像Matlab一样增长数组,我假设你的意思是:

mat = [mat; col]

您可以在C ++中调整矩阵的大小,但不能使用如上所述的干净语法。

例如,您可以使用std::vector<std::vector<T>>来表示矩阵。

std::vector<std::vector<int> > mat;

然后添加一列:

for (int i=0; i<mat.size(); i++) mat[i].push_back(col[i]);

或添加一行

mat.push_back(row); // row is a std::vector<int>

答案 3 :(得分:0)

C ++本身没有标准的矩阵类。我认为这样一个类有太多不同的用途,使得一个大小适合所有解决方案都不可能。 Stroustrup的书( The C++ Programming Language (第三版)中有一个例子和讨论关于数值矩阵的简单实现。

但是,对于图像处理,使用现有库要好得多。

您可以查看CImg。我之前使用过它并且发现它很快并且记录良好。

如果您使用的是AMD机器,我知道有一个优化的图像处理库来自AMD,即Framewave项目Framewave Project

另外,如果您习惯使用MATLAB样式代码,那么您可能需要查看it++。 我认为项目的目标是让它尽可能与MATLAB相似。

答案 4 :(得分:0)

为OpenCV +1,在进行图像分析时特别有用,因为它抽象了基础数据类型(GRAYSCALE,RGB等)。