c - 通过复制边值来填充矩阵

标签 c matrix padding

我的程序创建了一个矩阵。它移动并将其置于一个更大的中心。现在我想用第一个矩阵的边缘值填充创建的边框,使其看起来像这样:visual example

到目前为止,我有以下代码,但它似乎没有正常工作(让我们将矩阵视为具有宽度、高度和边框的图像):

/////////////////////////Up/Down Fill////////////////////////////
for(i=border;i<(width+border);i++){
    for(j=0;j<(height+2*border);j++){
        if(j<border){
            fmatr[i][j]=fmatr[i][border];
        }
        else if(j>(height+border)){
            fmatr[i][j]=fmatr[i][(height+border)];
        }
    }
}

/////////////////////////Left/Right//////////////////////////////
for(i=0;i<(width+2*border);i++){
    for(j=0;j<(height+2*border);j++){
        if(i<border){
            fmatr[i][j]=fmatr[border][j];
        }
        else if(i>(width+border)){
            fmatr[i][j]=fmatr[(width+border)][j];
        }
    }
}

谁能指出正确的方向,如何做到这一点?

最佳答案

你是一个失误的受害者。

通常在 C 中,要迭代一个序列,您可以使用开始索引和 next_to_last 索引,以这种方式:

for (i = first; i < next_to_last; ++i)

这很方便,因为 next_to_last 索引是第一个加上长度:

for (i = first; i < first + length; ++i)

如果您想知道索引是否超出范围,您可以使用 <>= :

out_of_bounds = i < first || i >= next_to_last;
out_of_bounds = i < first || i >= first + length;

这一切都很酷,因为当你有两个连续的序列时,当你从一个序列转到另一个序列时,你不需要做任何调整:

for (i = 0; i < a; ++i) ...;
for (; i < b; ++i) ...;
for (; i < c; ++i) ...;

但是如果你想访问序列的最后一个元素,你必须记住减去一个:

last = array[next_to_last - 1];
last = array[first + length - 1];

所以当你说:

    else if(j>(height+border)){
        fmatr[i][j] = fmatr[i][(height+border)];
    }

你的意思可能是:

    else if(j >= height + border){
        fmatr[i][j] = fmatr[i][height + border - 1];
    }

对于 witdh run 也是如此。


也就是说,我会将内部循环写成两个循环。海事组织你的意图是这样的:

for (j = 0; j < border; ++j)
    fmatr[i][j] = fmatr[i][border];
for (j = height + border; j < height + 2 * border; ++j)
    fmatr[i][j]=fmatr[i][height + border - 1];

与宽度运行相同。

关于c - 通过复制边值来填充矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32290505/

相关文章:

python - 使用 awk 从多个文件计算文件中的平均值

javascript - (jsx) 在元素的文本中使用 padEnd

opencv - 使用带有BORDER_CONSTANT选项的openCV Blur?

padding - 有没有办法使用填充来处理 "join"Flutter Widgets?

c - 这段c代码中的语法错误是什么?

c - 按字母顺序对单词进行排序 C

c - 如何打印二维数组中的最大值和最小值?

c - mktime 在错误的变量上越界

r - 将 R data.frame 转换为矩阵,其中两个因子的级别作为矩阵的行名和列名

c++ - Eigen::MatrixXd 到 flann::Matrix<double> 转换