[Qt-interest] Enhanced monochrome conversion

M. Bashir Al-Noimi mbnoimi at gmx.com
Thu Nov 26 13:35:02 CET 2009


M. Bashir Al-Noimi wrote:
>
> Hi All,
>
> It's easy to convert any image to monochrome format by using 
> QImage::convertToFormat like this:
>
> pImage.convertToFormat(QImage::Format_Mono, Qt::MonoOnly|Qt::ThresholdDither|Qt::AvoidDither);
>
> but convertToFormat always guessing that the value of conversion's 
> threshold is 255 where in some cases we need to use another 
> threshold's value. I checked out GIMP and I noticed that it uses an 
> automatic method for guessing threshold's value (see the example 
> below) so I'm wondering:
>
> *How I can convert images to monochrome format by using auto 
> threshold's value just like GIMP conversion method?*
>
>
>
> Original
>
>
> QImage conversion
>
>
>
> Automatic GIMP conversion
>
>
>
> *P.S*
>
> I've wrote a stupid function for converting images to monochrome by 
> using a specified threshold's value as following but I need to know 
> how I can automatically specify threshold's value:
>
> QImage getThresholdBW(QImage pImage, int threshold)
> {
>     QImage result = pImage;
>     result.fill(255);
>     for(int x=0; x<pImage.width(); x++)
>         for(int y=0; y<pImage.height(); y++)
>             result.setPixel(x, y, qGray(pImage.pixel(x, y))>threshold?qRgb(255, 255, 255):qRgb(0, 0, 0));
>
>     return result;
> }

I fixed the problem and I've posted a feature request about my solution 
in the following link:
http://bugreports.qt.nokia.com/browse/QTBUG-6269

the solution is:

*The following code for converting images to monochrome by using 
automatic guessing for threshold:*

    QImage result = pImage;
    QList<int> pixelsValues;
    for(int x=0; x<pImage.width();x++)
    {
        for(int y=0; y<pImage.height();y++)
        {
            QRgb rgb = pImage.pixel(x,y);
            QColor color(rgb);
            pixelsValues<<color.lightness();
        }
    }
    qSort(pixelsValues);
    int median2 = (pixelsValues.first() + pixelsValues.last())/2;
    int threshold = median2;
    for(int x=0; x<pImage.width(); x++)
        for(int y=0; y<pImage.height(); y++)
            result.setPixel(x, y, qGray(pImage.pixel(x, y))>threshold?qRgb(255, 255, 255):qRgb(0, 0, 0));
    qDebug("threshold = %d", threshold);
    return result;



*and the following code is for converting images to monochrome manually 
by specifying threshold:*

        QImage result = pImage;
        result.fill(255);
        for(int x=0; x<pImage.width(); x++)
            for(int y=0; y<pImage.height(); y++)
                result.setPixel(x, y, qGray(pImage.pixel(x, y))>threshold?qRgb(255, 255, 255):qRgb(0, 0, 0));

        return result;





-----
Best Regards
Muhammad Bashir Al-Noimi
My Blog: http://mbnoimi.net/
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.qt-project.org/pipermail/qt-interest-old/attachments/20091126/d3735e74/attachment.html 
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: image/jpeg
Size: 28286 bytes
Desc: not available
Url : http://lists.qt-project.org/pipermail/qt-interest-old/attachments/20091126/d3735e74/attachment.jpe 
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: image/jpeg
Size: 9160 bytes
Desc: not available
Url : http://lists.qt-project.org/pipermail/qt-interest-old/attachments/20091126/d3735e74/attachment-0001.jpe 
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: image/jpeg
Size: 33083 bytes
Desc: not available
Url : http://lists.qt-project.org/pipermail/qt-interest-old/attachments/20091126/d3735e74/attachment-0002.jpe 


More information about the Qt-interest-old mailing list