Russian Qt Forum
Ноябрь 24, 2024, 19:41 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Выделение контуров изображения  (Прочитано 4992 раз)
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]
Записан
Akaiten
Гость
« Ответ #1 : Февраль 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));
 
Записан
eXpr
Гость
« Ответ #2 : Февраль 15, 2010, 17:59 »

Ух ты блин, как же все просто было)
Я с этой программой промаялся два дня нафиг) спасибо

Только алгоритм все равно не работает так, как должен; может кто нибудь подскажет более точную реализацию, либо альтернативу?
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.067 секунд. Запросов: 20.