【问题标题】:Image turns black when I multiply pixels by a scale factor当我将像素乘以比例因子时图像变黑
【发布时间】:2014-11-16 07:36:07
【问题描述】:
void scale_brightness( uint8_t array[],
               unsigned int cols,
               unsigned int rows,
               double scale_factor )
{
    for (int x = 0; x < (cols*rows); x++)
    {
        array[x] = round(scale_factor * (double)(array[x]));
        if (array[x] > 255 )
        {
            array[x] = 255;
        }
    }

}

这个函数应该将像素乘以一个比例因子,它会根据该因子乘以什么来使图像变亮或变暗。如果相乘的图像大于 255,则像素的阈值为 255。我尝试了代码并输入了 scale_brightness (array, 256, 256, 2)。这应该将每个像素乘以 2,因此它应该使图像变亮。但是当我运行它时,它变成了全黑,与它应该做的完全相反。我也试过做0,结果变黑了。任何其他颜色都给了我深灰色。有人能帮我找出为什么会这样吗?

【问题讨论】:

    标签: c image colors pixels


    【解决方案1】:

    您的逻辑不起作用,因为 array[x] 不能超过 255,所以 if 正文永远不会执行,而 array[x] 只是被截断。使用额外的double 值进行计算:

        double d = round(scale_factor * (double)(array[x]));
        if (d >= 255.0 )
        {
            array[x] = 255;
        }
        else
        {
            array[x] = (uint8_t)d;
        }
    

    请注意,可以通过排除浮点运算来有效优化此循环。乘以double 因子可以替换为乘以int 并右移。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-05-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-04
      • 2013-11-25
      • 1970-01-01
      相关资源
      最近更新 更多