It gave me nearly same result.
there is a third choice: (minimum+maximum)/2 - this is exactly what colors->levels->auto should be doing.
It's working, thanks wysota.
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);
pixelsValues<<color.lightness();
}
}
qSort(pixelsValues);
// int median;
// int count = pixelsValues.count();
// if(count%2==0)
// median = (pixelsValues[count/2]+pixelsValues[(count/2)+1]) / 2;
// else
// median = pixelsValues[count/2];
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);
// result.save("c:/res.jpg");
return result;
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 median;
// int count = pixelsValues.count();
// if(count%2==0)
// median = (pixelsValues[count/2]+pixelsValues[(count/2)+1]) / 2;
// else
// median = pixelsValues[count/2];
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);
// result.save("c:/res.jpg");
return result;
To copy to clipboard, switch view to plain text mode
Bookmarks