Image processing and sizes
-
I've got massages in output window of my debbuger
QImage::pixel: coordinate (0,2336) out of range
QImage::pixel: coordinate (0,2337) out of range
QImage::pixel: coordinate (0,2338) out of range
QImage::pixel: coordinate (0,2339) out of range
QImage::pixel: coordinate (0,2340) out of range
QImage::pixel: coordinate (0,2341) out of range
...
So it's happens when I processed 3504*2336 image. why it not limited by size of image or I have a mistake in my loops limits? -
-
So with all the above in place your code should look like this:
@
void ImageWidget::proccessImage(QColor color)
{
// Search algorithmQImage image = m_image;
int match = 5;for(int i = 0; i<image.height(); i++)
{
for(int j = 0; j<image.width(); j++)
{
QRgb currentPixel = image.pixel(j,i);QColor pixColor = QColor::fromRgb(currentPixel);
if(qAbs(pixColor.red()-color.red()) > match && qAbs(pixColor.green()-color.green()) > match && qAbs(pixColor.blue()-color.blue()) > match) image.setPixel(j,i,qRgb(255,255,255));
}
}
m_imageLabel->setPixmap(QPixmap::fromImage(image));
}
@ -
Hi Anticross,
One idea to make the code a bit more readable und to easier find such problems (use x and y instead of i and j), make some renaming. You can also use QRgb directly.
@
void ImageWidget::proccessImage(QColor color)
{
// Search algorithmQImage image = m_image; int difference = 5; for(int y = 0; y < image.height(); y++) { for(int x = 0; x < image.width(); x++) { QRgb currentPixel = image.pixel(x,y); if( qAbs(qRed(currentPixel) - color.red()) > difference && qAbs(qGreen(currentPixel) - color.green()) > difference && qAbs(qBlue(currentPixel) - color.blue()) > difference) { image.setPixel(x,y,qRgb(255,255,255)); } } } m_imageLabel->setPixmap(QPixmap::fromImage(image));
}
@ -
I usually tend to use i for iterating over x and j for iterating over ysince it reminds me of i and j unit vectors. I also tend to use epsilon or delta for small values such as your match or difference variables. It's just taste though and this is my background in mathematics prejudicing me. ;-)
-
As we are talking about coordinates, and height and width, it's usually x and y. That's why I changed that. i is usually (with the developers I work with :-) ) a variable for a normal for loop. For cascading, I normally use row and column or s9imilar things, por x and y if they are coordinated (which they are in this case).
But it's a matter of taste.
And match was (for me) just nothing that was clear from the name. match for me would be a boolean (matches or not)