Мне дали такую задачку: есть изображение, нужно выделить его контуры.
В википедии дается много разных способов сделать это, я выбрал простейший - фильтр Робертса.
Проблема в том, что программа всегда выдает черное изображение(т.е. цвет пикселя 0)
Посмотрите пожайлуста, скажите в чем ошибка в моем коде
#include <QImage>
#include <QColor>
#include <math.h>
/**************************************/
const double kR = 0.3;
const double kG = 0.59;
const double kB = 0.11;
uint colourGray(QColor colour)
{
double red = (double)colour.red();
double green = (double)colour.green();
double blue = (double)colour.blue();
uint colourGrayPixel = static_cast<uint>(((red*kR) + (green*kG) + (blue*kB))*100);
return colourGrayPixel;
}
int main(int argc, char *argv[])
{
QImage inputImage;
inputImage.load(QString("D:/the_girl.jpg"));
QImage outputImage(inputImage.width(), inputImage.height(), QImage::Format_RGB888);
for(int y=0; y<inputImage.height()-1; y++)
for(int x=0; x<inputImage.width()-1; x++)
{
QColor colourOfPixXY, colourOfPixXxYy, colourOfPixXxY, colourOfPixXYy;
colourOfPixXY.QColor::fromRgb(inputImage.pixel(x, y));
colourOfPixXxYy.QColor::fromRgb(inputImage.pixel(x+1, y+1));
colourOfPixXxY.QColor::fromRgb(inputImage.pixel(x+1, y));
colourOfPixXYy.QColor::fromRgb(inputImage.pixel(x, y+1));
//colourOfPixXY = qGray(inputImage.pixel(x, y));
//colourOfPixXxYy = qGray(inputImage.pixel(x+1, y+1));
//colourOfPixXxY = qGray(inputImage.pixel(x+1, y));
//colourOfPixXYy = qGray(inputImage.pixel(x, y+1));
int outputColour = (abs(colourGray(colourOfPixXY) - colourGray(colourOfPixXxYy)) +
abs(colourGray(colourOfPixXxY) - colourGray(colourOfPixXYy)));
outputImage.QImage::setPixel(x, y, outputColour);[code]
}
outputImage.save(QString("D:/result.bmp"));
return 0;
}[/code]