gpt4 book ai didi

c - 填充图像数组的逻辑

转载 作者:行者123 更新时间:2023-12-01 06:16:10 25 4
gpt4 key购买 nike

请。请注意,这不是任何家庭作业问题,而是我正在做的工作以及我需要一些指导的地方。

我有一个二维图像存储在一维数组中(行主要顺序)。我需要通过在顶部填充 1 行,在底部填充 1 行,在图像右侧填充 1 列,在图像左侧填充 1 列来填充边界像素的复制图像。我正在尝试在 C 代码中执行此操作。

例如将存储在一维数组中的二维图像视为如下所示的 img[]。实际图像的大小为 3x4(4 行 3 列),在两个方向(上/下/左/右)填充 1 行 1 列后,最终图像的大小为 5x6(6 行,5 列)。

int img[30] = {0,0,0,0,0,0,1,2,3,0,0,4,5,6,0,0,7,8,9,0,0,10,11,12,0,0,0,0,0,0};

在我的例子中,填充的大小是已知的,只有顶部和底部 1 行,图像左右各 1 列。因此,我实现这一点的一种方法是在给定图像数组中的像素索引与填充的输出像素索引之间创建映射。我将此映射存储在预先计算的查找表中,并在填充逻辑中使用该表。

填充后的输出应该是这样的:

int img[30] = {1,1,2,3,3,1,1,2,3,3,4,4,5,6,6,7,7,8,9,9,7,7,8,9,9};

我创建的查找表是:-

int lut[6,6,7,8,8,...];

并按如下方式使用此表:

for(i=0;i<30;i++)
{
img[i] = img[lut[i]]; //something on this lines...
}

但我有兴趣以编程方式实现此图像填充逻辑,而不是使用基于查找表的方法。即我想在运行时计算代码中的像素索引。编辑:我还需要就地获取填充图像(在同一个缓冲区中,当然会为额外的填充行/列提供存储空间)。

代码会是什么样子的任何指针。

谢谢。

-广告

最佳答案

#include <stdio.h>

void pad_image(int* img, int cols, int rows)
{
for( int i = 0 ; i < cols ; ++i )
{
// top and bottom
img[i] = img[i+cols];
img[i+cols*(rows-1)] = img[i+cols*(rows-1)-cols];
}
for( int j = 0 ; j < rows ; ++j )
{
// left and right
img[j*cols] = img[j*cols+1];
img[j*cols+cols-1] = img[j*cols+cols-2];
}
}

int main( int argc, char** argv )
{
int img[30] = {0,0,0,0,0,0,1,2,3,0,0,4,5,6,0,0,7,8,9,0,0,10,11,12,0,0,0,0,0,0};
for( unsigned int i = 0 ; i < 30 ; ++i )
printf("%d ",img[i]);
printf("\n");
pad_image(img,5,6);
for( unsigned int i = 0 ; i < 30 ; ++i )
printf("%d ",img[i]);
printf("\n");
}

关于c - 填充图像数组的逻辑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4880819/

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