QImage灰度化

文章介绍了三种在Qt环境中将彩色图像转换为灰度图像的方法,包括使用QImage的convertToFormat函数,自定义函数通过计算像素平均值,以及遍历像素点设置灰度值。此外,还提供了一个调整图像亮度的函数,通过改变像素的红绿蓝分量实现。
摘要由CSDN通过智能技术生成

灰度化
第一种方法

img = img.convertToFormat(QImage::Format_Grayscale8);

第二种方法

QImage* ImageProcessor::greyScale(QImage *origin)
{
    QImage * newImage = new QImage(origin->width(), origin->height(), QImage::Format_ARGB32);

    QColor oldColor;

    for(int x = 0; x<newImage->width(); x++){
        for(int y = 0; y<newImage->height(); y++){
            oldColor = QColor(origin->pixel(x,y));
            int average = (oldColor.red()+oldColor.green()+oldColor.blue())/3;
            newImage->setPixel(x,y,qRgb(average,average,average));
        }
    }
    return newImage;
}


第三种方法

 QImage img;
    img.load("C:\\Users\\Desktop\\fj_1_meitu.png");
//    img = img.convertToFormat(QImage::Format_Grayscale8);
    for (int ii = 0; ii < img.width(); ii++) {
                        for (int jj = 0; jj < img.height(); jj++) {
                            int gray = qGray(img.pixel(ii, jj));
                            img.setPixel(ii, jj, QColor(gray, gray, gray).rgb());
                        }
                    }
    img.save("C:\\Users\\Desktop\\fj.png");

QImage GraizeImage( const QImage& image )
{
    int w =image.width();
    int h = image.height();
    QImage iGray(w,h, QImage::Format_ARGB32);

    for(int i=0; i<w;i++)
    {
        for(int j=0; j<h;j++)
        {
            QRgb pixel = image.pixel(i,j);
            int gray = qGray(pixel);
            QRgb grayPixel = qRgb(gray,gray,gray);
            QColor color(gray,gray,gray,qAlpha(pixel));
            iGray.setPixel(i,j,color.rgba());
        }
    }
    return iGray;
}



亮度

QImage * ImageProcessor::brightness(int delta, QImage * origin){
    QImage * newImage = new QImage(origin->width(), origin->height(), QImage::Format_ARGB32);

    QColor oldColor;
    int r,g,b;

    for(int x=0; x<newImage->width(); x++){
        for(int y=0; y<newImage->height(); y++){
            oldColor = QColor(origin->pixel(x,y));

            r = oldColor.red() + delta;
            g = oldColor.green() + delta;
            b = oldColor.blue() + delta;

            //we check if the new values are between 0 and 255
            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;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值