gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 19:48:29 28 4
gpt4 key购买 nike

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/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com