Форум программистов, компьютерный форум, киберфорум
C++
Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Распараллеливание процесса путем использования алгоритма четно-нечетных перестановок. https://www.cyberforum.ru/ cpp/ thread58441.html
Здравствуйте. Необходимо в среде Turbo C на вычислительном кластере под Linux с использованием MPI распараллелить глупую сортировку массива с использованием алгоритма чётно-нечётных перестановок....
C++ Ввод без отображения
Как сделать ввод через " cin >> ", но чтобы вводимые значения(строка(char s)) не отображались??? Добавлено через 28 секунд Если " cin >> " не подходит то можно что-то другое!
C++ Лабораторная C++
Ребята нужна помощь 17 вариант программа...
C++ Проблема со скачиванием http-страницы Возможно, что вопрос не к программистам, а к тем, кто разбирается в протоколе http, но для начала попробую здесь Когда-то я нашёл статью о том, как программно скачивать страницы -... https://www.cyberforum.ru/ cpp/ thread58237.html
C++ Записная книжка https://www.cyberforum.ru/ cpp/ thread57795.html
Помогите пожалуйста доделать записную книжку. Там суть такая что при запуске читаются все файлы в мультимап и в мап. Дальше потом обрабатываются комбобоксы чтобы выбирать кафедру->Group->студент и...
exe in *jpg C++
можно и это осущиствить?чтобы у проги был формат другой,напр jpg,mp3,doc?
C++ Разрешение экрана при DOS
Какое разрешение имеет экран, когда включен режим эмуляции DOS'а в полноэкранном режиме?
C++ Глюк при вызове strcat. Здравствуйте. Програмка должна объединять две строки в одну и сохранять в файле. при запуске проги выскакивает отладчик, но я увы не силён в асемблере. закоментированием строк пришёл к тому, что... https://www.cyberforum.ru/ cpp/ thread56921.html
C++ программа работающаю с динамической матрицей(память выделяется динамически) трабл с подсчетом строк в файле https://www.cyberforum.ru/ cpp/ thread56462.html
В матрице найти минимальный элемент. Разделить элементы строки, в которой он находится, на найденный минимальный элемент. обязательно чтение матрицы из внешнего файла, при этом память под нее должна...
C++ VirtualAlloc Необходимо зарезервировать память в определенном фиксированном регионе виртуального адресного пространства. const int Addr2=0x00043534; int NumberOfBytes=20; LPVOID... https://www.cyberforum.ru/ cpp/ thread56425.html
Эксперт С++
1661 / 1033 / 174
Регистрация: 27.09.2009
Сообщений: 1,945
24.10.2009, 18:46 0

Обработка изображений

24.10.2009, 18:46. Просмотров 18554. Ответов 9
Метки (Все метки)

Ответ

Проще всего работать с файлами BMP, поскольку данные там хранятся в несжатом формате. При работе с другими форматами они просто разжимаются в такой же. Вкратце обрисую основы по самому простому варианту.
В полноцветном формате на каждый пиксель отводится 3 или 4 байта (по одному байту на каналы Red, Green, Blue, 4-й байт на альфа-канал, но его можно пока игнорировать). Эти группы расположены в последовательно: пиксель за пикселем, строка за строкой. Соответственно, при загрузке надо:
- прочитать заголовок BMP (это несложное действие подробно документировано в MSDN) и узнать параметры изображения (ширина, высота, количество информации, отводимой на пиксель); рекомендую работать только с 32-битными изображениями
- выделить требуемое количество памяти, загрузить туда из файла сырые данные; формат BMP вообще-то предписывает хранить строки в обратном порядке, но зачастую в заголовке просто указывают высоту со знаком минус и кладут строки в прямом порядке: в этих нюансах неплохо подразобраться
Для чтения-записи пикселей надо преобразовывать позицию пикселя в линейное смещение в созданном массиве. Это несложно: при оси X слева направо и оси Y сверху вниз (точка [0, 0] расположена в верхнем левом углу изображения и координаты точек всегда неотрицательны) линейным номером пикселя будет x + y*width. Информация о пикселе может быть представлена либо как
C++
1
struct Pixel3 {unsigned char R, G, B;};
, либо как
C++
1
struct Pixel4 {unsigned char R, G, B, A;};
Компоненты красного, зелёного и синего каналов обрабатываются обычно независимо друг от друга. В соответствии с указанным типом данных, их значения могут лежать в пределе от 0 (минимальная яркость) до 255. Таким образом, обработка изображения сводится к работе с одномерным массивом и несложной целочисленной арифметике.
Сохранение полученного изображения тоже достаточно простая задача. В соответствии с тем же MSDN формируешь структуру заголовка файла BMP и заголовка изображения BMP с заполнением нужных полей, и скидываешь их в файл в этом порядке, после чего пишешь сами данные.

Вернуться к обсуждению:
Обработка изображений
1
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
24.10.2009, 18:46
Готовые ответы и решения:

OpenCV/C++ обработка изображений
В общем задача следующая, есть изображение(бинарное), подсчитать кол-во объектов т.е изначально...

Обработка изображений - стандартные эффекты фотошопа
Подскажите пожалуйста какую нибудь библиотеку на C\C++ или даже C# с помощью которой можно было бы...

Обработка изображений: получить координаты центра самой большой красной банки на фотографии
Есть фотография. На фотографии банки красного цвета. Надо получить координаты центра самой большой...

Обработка изображений
Здравствуйте! Помогите пожалуйста. Нужно в какой-либо массив загрузить до 100 изображений, каждое...

9
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.