Форум программистов, компьютерный форум, киберфорум
Наши страницы

C++

Войти
Регистрация
Восстановить пароль
 
Victrokex
0 / 0 / 0
Регистрация: 21.10.2013
Сообщений: 35
#1

Кодирование бинарного изображения - C++

12.12.2014, 18:18. Просмотров 688. Ответов 6
Метки нет (Все метки)

Есть бинарное изображение.
Как считать его код и составить из него матрицу нулей и единиц?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.12.2014, 18:18
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Кодирование бинарного изображения (C++):

Кодирование Хаффмана - C++
Помогите написать программу для кодирования и декодирования строк вида "a_!slf" с помощью метода Хаффмана через частотный код. Может у...

Жесткое кодирование - C++
Есть задание в котором способ ввода жесткое кодирование, собственно этого я и не знаю. Объясните пожалуйста данную штуку.

Кодирование сверточным кодом - C++
кто может написать программу кодирования сверточным кодом? Ну или хотя бы кодирование любым кодом, чтобы можно было закодировать док.

Высота бинарного дерева поиска - C++
Что неправильно в программе? Полное условие #include <iostream> #include <cstdio> #pragma comment (linker,...

OpenCV. Некорректное чтение бинарного файла - C++
Здравствуйте. При использовании opencv (2.4.6) столкнулся со следующей особенностью (или багом). Имеются бинарные файлы (fits-файлы с...

Как осуществить Обработку бинарного файла? - C++
Файл содержит произвольные данные. Определить, встречается ли в файле определенная последовательность байт (заданных виде массива...

6
solar_wind
759 / 750 / 42
Регистрация: 06.07.2009
Сообщений: 2,977
Завершенные тесты: 1
31.12.2014, 06:53 #2
Открываешь бинарный файл. Читаешь его, у тебя и будут нули и единицы.
Создаешь в памяти двумерный массив, и записываешь туда нули и единицы из файла.
Вот и получится матрица....
0
taras atavin
3883 / 1757 / 92
Регистрация: 24.11.2009
Сообщений: 27,566
31.12.2014, 08:12 #3
solar_wind, не знаете, не отвечайте.Victrokex, бинарные графические файлы могут быть в разных форматах. Одни сразу содержат искомые матрицы, другие состоят из подматриц и в общем случае даже не гарантировано, что подматрицы хотябы одинаково ориентированы, может быть в одной следующий бит соответствует соседнему пикселу по горизонтали, а за последним в строке следует первый в следующей строке, а в другой соседний бит соответствует соседнему пикселу по вертикали, а за последним в столбце следует первый в следующем столбце. Возможно соседние биты соответствуют даже не соседним пикселам, на спектруме, например, стандартный формат имеет чередование строк, при котором номера соседних в файле строк различаются на 8. Кроме того, матрица, или её части всегда располагаются по некоторым смещениям от начала файла, от начала заголовка/подзаголовка, или от самих полей смещения. И мало даже этого, может быть в какой то части матрицы нули обозначены единицами, а единицы нолями. Может быть вообще целая подматрица обозначена некоторым кодом. Так что начинать надо с чтения спецификации конкретного формата. Что за файл? Какого типа?
0
solar_wind
31.12.2014, 08:18
  #4

Не по теме:

taras atavin, Ну так про формат ничего не сказано, и про то что конкретно должна содержать матрица тоже

0
taras atavin
3883 / 1757 / 92
Регистрация: 24.11.2009
Сообщений: 27,566
31.12.2014, 09:02 #5

Не по теме:

Он просто не знал.



Добавлено через 31 секунду
Victrokex, назови тип файла, покопаюсь в энциклопедии.
0
Victrokex
0 / 0 / 0
Регистрация: 21.10.2013
Сообщений: 35
01.01.2015, 09:47  [ТС] #6
я беру обычную картинку, делаю ее размером 512х512, и сохраняю в черно-белом формате бмп
вот такое изображение.
0
taras atavin
3883 / 1757 / 92
Регистрация: 24.11.2009
Сообщений: 27,566
01.01.2015, 10:47 #7
Цитата Сообщение от Victrokex Посмотреть сообщение
я беру обычную картинку, делаю ее размером 512х512, и сохраняю в черно-белом формате бмп вот такое изображение
не бывает "обычных" картинок. Файл BMP начинается с заголовка
C++
1
2
3
4
5
6
7
8
9
10
#pragma pack(push, 1)
struct WINBMPFILEHEADER
{
 uint16_t FileType; //4D42
 uint16_t FileSize;// Размер файла
 uint16_t Reserved1;
 uint16_t Reserved2;
 uint32_t BitmapOffset; // Смещение данных
};
#pragma pop(push, 1)
В зависимости от версии дальше может быть
C++
1
2
3
4
5
6
7
8
9
10
#pragma pack(push, 1)
struct WIN2XBUTMAPHEADER
{
 uint32_t Size; //  Размер заголовка
 int16_t Width;
 int16_t Height;
 uint16_t Panels;
 uint16_t BitPerPixels;
};
#pragma pop(push, 1)
Раз нужны только единицы и ноли, то BitPerPixels=1, но дальше идти рано, надо определить версию. Чему равен Size в WIN2XBUTMAPHEADER? Если не 12, то вместо этого заголовка на его месте расположен другой заголовок более поздней версии и данные могут быть сжаты. Если Size=40, то на самом деле вместо этого заголовка
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
struct WIN3XBUTMAPHEADER
{
 uint32_t Size; //  Размер заголовка
 int16_t Width;
 int16_t Height;
 uint16_t Panels;
 uint16_t BitPerPixels;
 uint32_t Compression;
 uint32_t SizeOfBitmap;
 int32_t HorzResolution;
 int32_t VertResolution;
 uint32_t ColorsUsed;
 uint32_t ColorsImportant;
};
#pragma pop(push, 1)
. Можно назад на 12 байт не возвращаться, а сразу декларировать union и если 40, то дочитать оставшиеся 28 байт по указателю на поле Compression.
0
01.01.2015, 10:47
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
01.01.2015, 10:47
Привет! Вот еще темы с ответами:

Нахождение скелета бинарного изображения. - C++ Builder
Здравствуйте. Возникла следующая проблема. Не могу реализовать алгоритм нахождения скелета бинарного изображения. Задача состоит в том, что...

Преобразование бинарного изображения, используя метод Ниблэка - C++ Builder
Написать программу преобразования полутонового изображения в бинарное изображение, используя метод Ниблэка. Люди, у кого есть...

Отрисовка изображения поверх канвы (изображения) и вращение изображения - C++ Builder
Здравствуйте. Столкнулся с 2умя проблемами при работе с изображениями средствами C++ Builder. Хочу сделать одну интересную штуку, но...

Загрузка изображения в Image с сохранении соотношения сторон изображения - C++ Builder
загрузка изображения в Image(с фиксированным размером) при этом изображение должно сохранить соотношение сторон и полностью уместится в...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

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