Название: Выделение контуров изображения
Отправлено: eXpr от Февраль 15, 2010, 13:35
Мне дали такую задачку: есть изображение, нужно выделить его контуры. В википедии дается много разных способов сделать это, я выбрал простейший - фильтр Робертса. Проблема в том, что программа всегда выдает черное изображение(т.е. цвет пикселя 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]
Название: Re: Выделение контуров изображения
Отправлено: Akaiten от Февраль 15, 2010, 17:43
C++ (Qt) 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));
Название: Re: Выделение контуров изображения
Отправлено: eXpr от Февраль 15, 2010, 17:59
Ух ты блин, как же все просто было) Я с этой программой промаялся два дня нафиг) спасибо
Только алгоритм все равно не работает так, как должен; может кто нибудь подскажет более точную реализацию, либо альтернативу?
|