Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 13.11.2007, 15:47   #1
eliyas
Новичок
Джуниор
 
Регистрация: 13.11.2007
Сообщений: 2
Вопрос Как работать с изображениями

Всем доброго времени суток!

На С++ программирую совсем недавно, нужен хелп по такой теме: нужно прогу написать, которая получает черно-белую картинку - пейзаж(формате jpeg, или как мне посоветовали, PGM) - и выделяет на ней линюю горизонта (границу с небом) и нижнее очертание дальних гор (самые темные), как показано на прикрепленном рисунке.

Т.е. как я понимаю, каждый пиксель картинки заносится в двумерный массив по координатам и имеет значение от 0 до 255 (не помню сейчас точно). 0 - белый цвет, чем больше, тем чернее. Потом каким-то образом нужно определить, где начинаются пиксели с одинаковыми (или почти одинаковыми) цветовыми значениями - типа небо, и сделать черными рядомстоящие пиксели. Затем, по той же логике можно и нижнюю линию нарисовать.

Потом все пиксели между линиями нужно сделать белыми, и , наконец, то, что получилось нужно экспортировать в новую картинку.

Вопрос: правильна ли моя логика и как импортировать картинку в массив, где вообще можно прочитать про обработку изображений? Заранее спасибо
Изображения
Тип файла: jpg clip_image002.jpg (30.7 Кб, 160 просмотров)
eliyas вне форума Ответить с цитированием
Старый 13.11.2007, 21:03   #2
mutabor
Телепат с дипломом
Старожил
 
Аватар для mutabor
 
Регистрация: 10.06.2007
Сообщений: 4,929
По умолчанию

Имхо самое сложное тут нарисовать эти две линии. Остальное дело техники. В какой среде делаешь? С++ понятие растяжимое.
Цитата:
Вопрос: правильна ли моя логика и как импортировать картинку в массив
логика правильная, в массив двойным циклом for пиксель за пикселем перекинуть, конечно для этого нужно знать как получить цвет определенного пикселя в картинке
The future is not a tablet with a 9" screen no more than the future was a 9" black & white screen in a box. It’s the paradigm that survives. (Kroc Camen)
Проверь себя! Онлайн тестирование | Мой блог
mutabor вне форума Ответить с цитированием
Старый 14.11.2007, 01:01   #3
eliyas
Новичок
Джуниор
 
Регистрация: 13.11.2007
Сообщений: 2
По умолчанию

Программирую в Dev-C++ 5. Дело в том, что логика более-менее понятна. Есть опыт программирования в java. Я главным образом не пойму как сам импорт картинки происходит. Допустим, импортировать текстовый файл я могу без проблем - отдельными чарами или построчно. Я не понимаю, как "видится" сама картинка, что она собой представляет в виде кода. Перерыл кучу разных книг и самоучителей - ничего конкретного не нашел по этой теме. Может кто вразумит?
eliyas вне форума Ответить с цитированием
Старый 14.11.2007, 18:52   #4
mutabor
Телепат с дипломом
Старожил
 
Аватар для mutabor
 
Регистрация: 10.06.2007
Сообщений: 4,929
По умолчанию

Я могу такую программу написать на Дельфи, ну еще может на Билдере С++ после некоторой адаптации, в нем тоже VCL. Могу немного помочь теорией.

В Дельфи с импортированием графики нет никаких проблем. Существуют специалные классы в VCL. Например TBitmap. Чтобы в него загнать картинку достаточно одной строки кода с указанием файла. Как ты понимаешь мало кто роется в исходниках чтобы понять как именно он это делает.
Но в общем BMP файл это набор байт никак не закодированный, ширину картинки умножь на высоту, и еще умножь на 3 (три байта на один пиксель, R G B это если он 24-х битный), и получишь размер файла. Нужно только знать в каком порядке их считывать.

Теперь куда это все записать в программе.
Картинка в виде кода представляет обычный двухмерный массив - матрицу. Элементы этой матрицы это целочисленные значения в диапазоне 0 - 16777216 (256*256*256). Если нужна будет работа с цветом можно для удобства заранее создать структуру с полями R,G,B каждое размером в байт. И сделать матрицу этих структур.
WinAPI имеет много графических функций.
GetRValue, GetGValue, GetBValue - вытянуть значение одной составляющей цвета
BitBlt - копирует части рисунка
И много других.

Надеюсь хоть чем-то помог )
The future is not a tablet with a 9" screen no more than the future was a 9" black & white screen in a box. It’s the paradigm that survives. (Kroc Camen)
Проверь себя! Онлайн тестирование | Мой блог
mutabor вне форума Ответить с цитированием
Старый 10.03.2011, 22:27   #5
Warrior Within
Новичок
Джуниор
 
Регистрация: 10.03.2011
Сообщений: 1
По умолчанию

Уважаемые программисты, подскажите, пожалуйста, как импортировать изображение в С++ (работа с обычной консолью). Да, и был бы очень кстати пример "переноса" каждой пиксели в массив.
Заранее спасибо, вы мне очень поможете.
Warrior Within вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Заполнение двумерного массива прямоугольников случайными изображениями Mischa Помощь студентам 1 11.03.2008 21:58
Работа с изображениями. varvara16 Мультимедиа в Delphi 2 21.12.2007 15:52
Как работать c USB? Araver Общие вопросы Delphi 4 05.11.2007 18:41
работа с изображениями. borodaj Мультимедиа в Delphi 3 21.04.2007 19:21
Работа с изображениями и рисунками dima00 Мультимедиа в Delphi 2 12.04.2007 15:11