【发布时间】: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。我认为您在代码中考虑过多。