[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