gpt4 book ai didi

c - Flatindexed 2D array - 垂直/水平翻转图像

转载 作者:行者123 更新时间:2023-11-30 15:10:16 26 4
gpt4 key购买 nike

我编写了一些代码来尝试回答这个问题。

我得到了一个程序来绘制图像,使用 X11 进行灰度缩放。

我被要求编写一个函数来水平/垂直翻转图像。

这是我的代码片段

// flip the image, left-to-right, like in a mirror.
void flip_horizontal( uint8_t array[],
unsigned int cols,
unsigned int rows )
{

int i;
int j;
for (i=0; i<rows;i++)
{
for (j=0; j<cols;j++)
{
array[rows*i+j]=array[rows*i+(cols-1-j)];
}
}
}

// flip the image top-to-bottom.
void flip_vertical( uint8_t array[],
unsigned int cols,
unsigned int rows )
{

int i=0;
int j=0;
for (i=0; i<rows;i++)
{
for (j=0; j<cols;j++)
{
array[rows*i+j]=array[rows*(rows-1-i)+j];
}
}
return;
}

我遇到的问题是我的水平函数仅翻转图像的一半,另一半保留其原始值。

我的垂直翻转功能也很困惑,生成的图像根本不像它应该的那样,所以我试图调试我在编写函数的逻辑中犯了错误的地方。

我使用平面索引方法来访问二维数组值。

最佳答案

在水平翻转中,内部循环遍历所有列并为像素分配其镜像值。假设最左边的像素是 100,最右边的像素是 23。一步之后,最左边的像素变成 23。现在,当涉及到最右边的像素时,它会尝试查看最左边的像素,中提琴,你会再次得到 23。值 100 已经丢失。这就是为什么图像的右半部分不会改变。

垂直翻转也有同样的问题。

您还存在索引问题。我假设 cols 表示列数,rows 表示行数。假设图像以行优先存储,这意味着平面数组中的布局是逐行排列,就像我们的读取顺序一样,那么第 i 行和 j 列的像素位于索引 cols*i+j ,而不是rows*i+j。不直观的是,cols 是列数,同时也是行的大小。祝调试愉快:)

关于c - Flatindexed 2D array - 垂直/水平翻转图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36297201/

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