From sitkarev на komitex.ru Sun Feb 20 05:26:17 2011 From: sitkarev на komitex.ru (Grigoriy A. Sitkarev) Date: Sun, 20 Feb 2011 04:26:17 +0300 Subject: [cdev] =?utf-8?b?0KTQuNC70YzRgtGA0LDRhtC40Y8g0Lgg0LrQvtC90LLQvtC7?= =?utf-8?b?0Y7RhtC40Y8=?= Message-ID: <4D606DB9.3090202@komitex.ru> Всех приветствую. В субботу я показывал слайды 145-й группе, которые сделал. Там действительно многовато было опечаток, я постарался всё исправить. А самое главное -- быстренько написал для вас учебную программу, чтобы вам было понятно как это работает. Чтобы её скомпилировать вам нужна установленная библиотека GTK+2.0 и пакет libgtk2.0-dev (это для Debian-like систем) или тот в котором лежат заголовки для GTK+2.0 в вашем дистрибутиве. Я на самом деле использую из неё только GDK-PixBuf для загрузки изображений в формате PNG, JPEG и сохранения их в файл. Распакуете архив: $ tar -zxvf imgfilter.tar.gz Зайдете в каталог: $ cd imgfilter И соберёте программу: $ make Если вдруг не найдёт какого-то заголовка -- попробуйте поправить руками. Но по идее если у вас Debian Lenny то всё должно работать. Дальше, берёте любую картинку в формате JPEG или PNG и натравливаете на неё Гауссов фильтр (сейчас там задан фиксированный радиус 5, можете поэкспериментировать с ним). $ ./imgfilter /home/sitkarev/image.png Утилита отфильтрует изображение, применив к нему Гауссов фильтр (ядро фильтра задаётся функцией gauss()), и поместит его в файл out.png в формате PNG, даже если вы открывали JPEG. Для простоты, там не обрабатываются краевые случаи поэтому вокруг изображения нетронутая каёмка шириной в радиус фильтра. Она также не оптимальна, т.к. например нет смысла каждый раз вычислять значения фильтра, можно их просто поместить в массив. Но мне нужно было продемонстрировать как это всё на самом деле считается, а задача оптимизации отложена на потом. RGB компоненты изображения выдираются и сохраняются в массиве float -- для того чтобы было понятно как они хранятся в буфере и как их оттуда заполучить. В коде оставлена функция которая делает конволюцию так как это даётся в книгах. Ради эксперимента попробуйте воспользоваться ей и посмотрите насколько медленнее она работает. -- Г.А. ----------- следущая часть ----------- A non-text attachment was scrubbed... Name: imagefiltering.pdf Type: application/pdf Size: 78642 bytes Desc: отсутствует URL: ----------- следущая часть ----------- A non-text attachment was scrubbed... Name: imgfilter.tar.gz Type: application/x-gzip Size: 1678 bytes Desc: отсутствует URL: From sitkarev на komitex.ru Sun Feb 20 16:04:44 2011 From: sitkarev на komitex.ru (Grigoriy A. Sitkarev) Date: Sun, 20 Feb 2011 15:04:44 +0300 Subject: [cdev] =?utf-8?b?0KTQuNC70YzRgtGA0LDRhtC40Y8g0Lgg0LrQvtC90LLQvtC7?= =?utf-8?b?0Y7RhtC40Y8=?= In-Reply-To: <4D606DB9.3090202@komitex.ru> References: <4D606DB9.3090202@komitex.ru> Message-ID: <4D61035C.50009@komitex.ru> Там ошибка нашлась, я поправил. Надо было обнулить gerror и gdk_pixbuf_save() возвращает TRUE если всё было хорошо и FALSE если плохо. Исправил, экспериментируйте. gerror = NULL; ok = gdk_pixbuf_save(pbuf, "out.png", "png", &gerror, NULL); if (!ok) printf("can't save file: %s\n", gerror->message); -- Г.А. 20.02.2011 04:26, Grigoriy A. Sitkarev пишет: > Всех приветствую. > > В субботу я показывал слайды 145-й группе, которые сделал. Там > действительно многовато было опечаток, я постарался всё исправить. А > самое главное -- быстренько написал для вас учебную программу, чтобы вам > было понятно как это работает. ----------- следущая часть ----------- A non-text attachment was scrubbed... Name: imgfilter.tar.gz Type: application/x-compressed-tar Size: 1721 bytes Desc: отсутствует URL: