【问题标题】:Inverting image intensities in c在 c 中反转图像强度
【发布时间】:2014-11-05 18:43:36
【问题描述】:
void invert( uint8_t array[], 
         unsigned int cols, 
         unsigned int rows )
{
    int y;
    uint8_t darkest = 255;
    uint8_t lightest = 0;
    uint8_t anygray = y;
    for (int x = 0; x < (cols*rows); x++)
    {
        for (y = 0; y < (cols*rows); y++)
        {
            if (array[x] == darkest && array[x] == anygray && array[x] == lightest)
            {
                array[x] = 255-y;
            }
        }
    }
}

我在这里有一个功能可以反转图像强度,使黑色变为白色,反之亦然,所有浅灰色都变为深灰色。但是我这里的代码似乎不起作用,我不知道我哪里出错了。有人能帮帮我吗?

【问题讨论】:

  • 内循环有什么用?另外,计数器y 与图像强度有什么关系?一次反转一个像素,仅使用当前像素的值。逆转也没有附加任何条件。
  • (我喜欢变量anygray 的正确命名方式。y 没有初始化,所以anygray 可以是任何灰色。)
  • @MOehm 我最初认为 y 可以是任何灰色。我还放了两个循环,这样它就可以遍历行和列。
  • 对不起,我在那儿有点刻薄。但是您的数据的组织方式(即在一个线性数组中)您只需要一个循环,它会访问所有像素。然后你只是无条件地反转强度:在你访问它之后,每个像素都是new == 255 - old。我认为您在代码中考虑过多。

标签: arrays c colors


【解决方案1】:

我没有制作任何原型来检查,但我发现至少有两件事看起来很可疑。

1) 我希望 IF 中的 && 是 ||。

2) 我希望 array[x] = 255 - y 类似于 array[x] = 255 - array[x]。

【讨论】:

  • 所以这意味着我什至不需要你,对吧?但是不加y怎么算灰色呢?
  • 您可以使用已经存在的值 array[x] 来解释灰色,正如 Keith 在 (2) 中建议的那样。你可以看到你的内部循环是没有意义的,因为你不断地覆盖同一个像素。此外,y 在循环中可以取大于 255 的值,具体取决于图像的尺寸。 (这不会造成伤害,但不会给您想要的结果。)
  • "y" 似乎与位置有关,而不是与位置中的颜色有关。数组似乎包含颜色。
猜你喜欢
  • 2010-10-19
  • 1970-01-01
  • 2016-01-06
  • 2021-11-10
  • 1970-01-01
  • 2021-03-16
  • 2011-04-12
  • 2012-09-29
  • 2012-05-06
相关资源
最近更新 更多