【问题标题】:Copying part of array to a second array in C将数组的一部分复制到C中的第二个数组
【发布时间】:2015-04-26 11:59:20
【问题描述】:

我正在编写一个图像处理代码来执行具有可变大小窗口的中值滤波器。 灰度图像已读入数组 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 中找到一种方法来做到这一点,有人可以帮我解决这个问题吗?

【问题讨论】:

  • 在结构体和数组之间复制大量数据,了解memmove()
  • @LeeDanielCrocker 为什么不memcpy?这里源和目的不重叠,所以不需要使用中间存储...
  • 向新手推荐更安全,大多数好的memmove() 实现不使用中间存储。

标签: c arrays image matlab image-processing


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

    image = new Image [5];
    

    【讨论】:

    • 这几乎不是答案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-10-18
    • 1970-01-01
    • 1970-01-01
    • 2021-04-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-03
    相关资源
    最近更新 更多