将数组的一部分复制到C中的第二个数组

将数组的一部分复制到C中的第二个数组,c,arrays,image,matlab,image-processing,C,Arrays,Image,Matlab,Image Processing,我正在编写一个图像处理代码,用可变大小的窗口执行中值滤波。 灰度图像已被读取到数组image1中,我正在尝试将数组的窗口选择复制到第二个数组窗口中。对于固定大小的3x3窗口来说,这很容易,您可以说: window[1]=image1[m-((win_size-1)/2)][n-((win_size-1)/2)]; window[2]=image1[m][n-((win_size-1)/2)]; window[3]=image1[m+((win_size-1)/2)][n-((win_size-1

我正在编写一个图像处理代码,用可变大小的窗口执行中值滤波。 灰度图像已被读取到数组image1中,我正在尝试将数组的窗口选择复制到第二个数组窗口中。对于固定大小的3x3窗口来说,这很容易,您可以说:

window[1]=image1[m-((win_size-1)/2)][n-((win_size-1)/2)];
window[2]=image1[m][n-((win_size-1)/2)];
window[3]=image1[m+((win_size-1)/2)][n-((win_size-1)/2)];
window[4]=image1[m-((win_size-1)/2)][n];
window[5]=image1[m][n];
window[6]=image1[m+((win_size-1)/2)][n];
window[7]=image1[m-((win_size-1)/2)][n+((win_size-1)/2)];
window[8]=image1[m][n+((win_size-1)/2)];
window[9]=image1[m+((win_size=1)/2)][n+((win_size-1)/2)];
在MATLAB中,通过在数组调用中使用向量,可以轻松地将其推广到任意大小的窗口:

window = image1(m-((win_size-1)/2):m+((win_size-1)/2),n-((win_size-1)/2):n+((win_size-1)/2));

我无法在C中找到一种方法来实现这一点,有人能帮我吗?

您必须为图像动态分配内存,无论图像是什么,然后将其添加到数组中。我不知道如何在C中精确地完成它,但是在C++中,它看起来像:

image = new Image [5];

通过在循环外部使用预定义int的嵌套for循环来解决。在第一个循环开始时指定为0,然后在每次迭代时指定+1。

要在结构和数组之间复制大量数据,请了解memmove。@LeedianelCrocker为什么不使用memcpy?这里的源和目标没有重叠,因此不需要使用中间存储……向新手推荐更安全,而且大多数好的memmove实现都不使用中间存储。这很难回答。