c++ - 用 C/C++ 编写 MATLAB 数组

标签 c++ c matlab

MATLAB 代码通过创建 backgroundSample{1}backgroundSample{2} 元胞数组来对灰度图像的部分背景进行采样>、...、backgroundSample{9}。这里 halfRowshalfCols 是图像的一半大小。

因为 backgroundSample 是一个包含九个二维矩阵的数组。我很困惑如何用 C/C++ 编写这段代码。我可以使用 backgroundSample[i].elements[m][n] 之类的方法获取 backgroundSample{i} 的元素吗?

MATLAB 代码:

offset = [-60, -20, 20, 60];  
for i = 1: 1: 3                             
    for j = 1: 1: 3
        backgroundSample{(i - 1) * 3 + j} = 
        background(halfRows + offset(i): halfRows + offset(i + 1), ...
                   halfCols + offset(j): halfCols + offset(j + 1));
    end;
end;

编辑:
正如我们可以在 MATLAB 中简单地通过 A = B 来分配矩阵一样。例如,我的问题中的 backgroundSample{1} = background(60: 100, 60: 100) 并且此分配位于 i: 1→3 和 j: 1→3 的循环中。然而,在C/C++中分配矩阵时,应该将每个元素一一分配。也许是这样的:

for(int i = 0; i < 3; i++)
    for(int j = 0; n < 3; j++)
        // to get every elements
        for(int m = 0 ...)
            for(int n = 0 ...)
                // not sure whether there is such usage of "->" in array
                backgroundSample[(i - 1) * 3 + j]->elements[m][n] =  background[i iteration][j iteration]

因此矩阵 backgroundSample[m][n]background[i​​][j] 的索引之间存在冲突。如何解决这个问题?

最佳答案

实现您所描述内容的最简单方法是声明一个多维数组:

int backgroundSample[9][3][3];

其中每个二维矩阵的维度假设为 3×3。要访问第 k 矩阵中的 (m, n) 元素,请编写 backgroundSample[k][m][ n]例如:

for (int m = 0; m < 3; ++m)
{
    for(int n = 0; n < 3; ++n)
    {
       backgroundSample[(i - 1) * 3 + j][m][n] = background[i][j];
    }
}

或者,如果该数组中的每个样本存储更多信息,您可以声明一个结构:

typedef struct
{
    int elements[3][3];

    // More fields...
} TSample;

然后创建一个数组:

TSample backgroundSample[9];

要访问元素,您可以编写backgroundSample[k].elements[m][n]

还可以动态分配内存(在运行时,这意味着您事先不知道有多少这些结构):

TSample* backgroundSample;

在 C++ 中,内存分配的实际过程如下所示:

backgroundSample = new TSample[9];

访问元素可以通过编写backgroundSample[k]->elements[m][n]来完成。请注意数组运算符 ->,它通过取消引用指针 backgroundSample[k] 来访问字段 elements

注意:每次对 new 的调用都需要伴随着对 delete 的匹配调用,以便释放内存, :

delete[] backgroundSample;

希望有帮助!

关于c++ - 用 C/C++ 编写 MATLAB 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18354062/

相关文章:

excel - 使用 Matlab 创建具有范围内 X 和 Y 值的 Excel 图表

c++ - C++ 模板如何专用于所有 32 位 POD 类型?

c++ - 如何从外部进程访问视频帧?

c++ - 将 H5::CompType 初始化为类的静态成员

c - 如何用C语言打印二维数组

matlab 字符数组到元胞数组

c++ - 测试标准输入是否有 C++ 输入(windows 和/或 linux)

c - write vs fprintf - 为什么不同,哪个更好?

c - open()系统调用等待

arrays - 初始化没有零的数组