灰度线性变换之c++实现(qt + 不调包)

1.介绍  

    灰度线性变化是最常用的点运算(对每个像素进行运算)操作之一,灰度线性变化就是将图片的像素值通过指定的线性函数进行变换,以此增强或者减弱图片的灰度。灰度线性变换的公式就是常见的一维线性函数:

    y_out = k * x_input + d (0<= y <=255; 0<= x <=255)

    1)当k>1的时候,此时可用于增加图片的对比度(图片的像素值在变换后全部增大,整体显示效果被增强)。

    2)当k=1的时候,此时可用于调节图片的亮度(亮度的调节就是让图像的各像素值都增加或者减少一定量,当d>0时候,图片亮度增加,反正则减少)

    3)当01的时候刚刚相反,图像的对比度和整体效果都被削弱了。

    4)当k<0的时候,原图片较亮的区域变暗,而较暗的区域会变亮。当k=-1,d=255的时候,就是反色处理,可参考我的一篇博客:反色操作之c++实现(qt + 不调包)

2.代码实现(代码是我以前自学图像处理时写的,代码很粗糙没做任何优化,但很好理解

    此代码中“origiin”一般为灰度图片,彩色图片转灰度图片,可参考我的一篇博客:彩色图转灰度图之c++实现(qt + 不调包)

/*线性变化函数*/
/*solpe为线性函数的斜率    inter为截距*/
QImage* MainWindow::LineTrans(QImage* origiin,float slope, float inter)
{
    QImage* newImage = new QImage(origiin->width(), origiin->height(), QImage::Format_ARGB32);

    QColor oldColor;
    int r, g, b;
    for(int y = 0; y < newImage->height(); y++)
    {
        for(int x = 0; x < newImage->width(); x++)
        {
            oldColor = QColor(origiin->pixel(x,y));
            r = slope * oldColor.red() + inter;
            g = slope * oldColor.green() + inter;
            b = slope * oldColor.blue() + inter;
            r = qBound(0, r, 255);
            g = qBound(0, g, 255);
            b = qBound(0, b, 255);
            newImage->setPixel(x, y, qRgb(r, g, b));
        }
    }
    return newImage;
}

3.参考资料

    数字图像处理——技术详解与Visual C++实践(左飞等著),写代码与写博客的时间相差两年,至于还参考其他的资料不,我已经忘记了,如若需要,我可以补上去

你可能感兴趣的:(基于qt图像算法处理,c++,qt,开发语言)