C++ 用C/C+编写MATLAB数组+;

C++ 用C/C+编写MATLAB数组+;,c++,c,matlab,C++,C,Matlab,MATLAB代码通过创建一个单元格数组,对灰度图像的背景部分进行采样,该单元格数组是backgroundSample{1},backgroundSample{2}背景示例{9}。这里的halfRows和halfCols是图像的一半大小 因为backgroundSample是一个包含九个二维矩阵的数组。如何用C/C++编写这段代码让我感到困惑。我可以使用类似于backgroundSample[I].elements[m][n]的方法获取backgroundSample{I}的元素吗 MATLAB代

MATLAB代码通过创建一个单元格数组,对灰度图像的
背景
部分进行采样,该单元格数组是
backgroundSample{1}
backgroundSample{2}
<代码>背景示例{9}。这里的
halfRows
halfCols
是图像的一半大小

因为
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 = new TSample[9];
for(int i=0;i<3;i++)
对于(int j=0;n<3;j++)
//获取所有元素
对于(int m=0…)
对于(int n=0…)
//不确定数组中是否有“->”这样的用法
背景样本[(i-1)*3+j]->元素[m][n]=背景[i迭代][j迭代]

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

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

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

然后创建以下内容的数组:

TSample backgroundSample[9];
要访问元素,您需要编写
backgroundSample[k].elements[m][n]

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

在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 = new TSample[9];
访问元素将通过写入
backgroundSample[k]->elements[m][n]
来完成。请注意数组操作符
->
,它通过取消引用指针
backgroundSample[k]
来访问字段
元素

注意:每次调用
new
时都需要伴随一个匹配的调用
delete
,以释放内存,即:


希望有帮助

你是想写一个MEX文件,还是仅仅是一个等效的C/C++程序?@EitanT我正在写一个等效的C/C++程序那么到底是什么问题?声明一个由9个指向二维矩阵的指针组成的数组,并为每个矩阵分配足够的内存。访问第i个矩阵中的元素可能看起来像
backgroundSample[i]>elements[j][k]
或者,您可以创建自己的矩阵类,这可以完成Matlab矩阵所能做的一切。所有这些嵌套for循环的内容都将由您的类封装(例如,在GetElement函数中)。@I我添加了更多关于这个问题的描述,请给出一个指向您提到的矩阵的指针示例谢谢,但可能存在一个错误:您的代码
backgroundSample[(I-1)*3+j][m][n]=background[I][j]
也应该在i和j的循环中,对吗?因此,通过这种方式,
backgroundSample[0][m][n]
将被分配相同的值,因为
background[i][j]
在跳出循环m&n之前不会更改。是的,这只是一个用法示例。假设它位于一个嵌套的for循环中,该循环迭代
i
j
,就像假设数组
background
是在其他地方定义的一样。显然,您应该根据您的需要对其进行修改。
backgroundSample = new TSample[9];
delete[] backgroundSample;