Каждый пиксель изображения может быть лишь в двух состояниях прозрачный цветной и не прозрачный
Принцип цветного отображения на компьютерных цветных мониторах такой же, как и у цветных телевизоров: все они используют принципы R (красный), G (зеленый) и B (синий), чтобы добавлять и смешивать цвета: испуская три различных интенсивности электронных лучей, внутри экрана Покрытые красным, зеленым и синим фосфоресцентные материалы излучают свет для создания цветов. Этот вид метода представления цвета называется представлением цветового пространства RGB (он также является наиболее используемым методом представления цветового пространства в мультимедийной компьютерной технологии).
Согласно принципу трех основных цветов, любой тип цветного света F может сочетаться с различными компонентами R, G и B.
Среди них r, g, b - коэффициенты трех основных цветов, участвующих в микшировании. Когда все три основных цветовых компонента равны 0 (самые слабые), смесь представляет собой черный свет, а когда все три основных цветовых компонента равны k (самый сильный), смесь представляет собой белый свет. Регулировка значений трех коэффициентов r, g и b позволяет смешивать различные оттенки между черным и белым светом.
Векторные форматы
GIF, JPEG, PNG, и WebP — растровые форматы, основанные на дискретном (пиксельном, точечном) представлении изображения, в то время как векторные форматы основаны на математических формулах (геометрическом представлении фигур). Подробнее о векторной графике можно прочитать в статье «Растровая и векторная графика».
1.2 Вектор
Векторная графика - это геометрические примитивы, основанные на математических уравнениях, таких как точки, линии или многоугольники в компьютерной графике для представления изображений.
---- Википедия
Векторная диаграмма отличается от растрового изображения тем, что она не состоит из одного пикселя, а ее суть - математическое выражение. Файл формата svg представляет собой векторную диаграмму.
JPEG (Joint Photographic Experts Group)
Формат JPEG получил своё название от объединённого комитета экспертов по фотографии, который и создал этот стандарт в конце 80-х — начале 90-х годов. Он был разработан для сжатия и хранения полноцветных фотографий. Поддерживает более 16 миллионов цветов.
Формат JPEG сжимает изображения с потерей качества. Алгоритм сжатия основан на разбиении исходного изображения на квадраты 8×8 пикселей, и последующей их группировке. Можно получать JPEG изображения очень маленького веса, но только за счёт ухудшения качества картинки, можно получить и очень качественные JPEG, но тогда картинка будет слишком тяжёлой. Поэтому главная задача при работе с JPEG — подобрать такой уровень качества, чтобы вес был небольшой и качество картинки было приемлемым (обычно, это диапазон от 60 до 70, но нужно тестировать на каждой картинке).
Пример изображения в формате JPEG с неоптимальной степенью сжатия. Качество: 10. Вес: 20 килобайт.
Первая картинка весит 20 килобайт. Это круто, очень мало, но для этого мы задали уровень качества 10 и картинка выглядит плохо.
Пример изображения в формате JPEG с оптимальной степенью сжатия. Качество: 60. Вес: 65 килобайт.
Вторая картинка с уровнем качества 60 весит чуть больше первой — 65 килобайт, но выглядит уже хорошо.
Пример изображения в формате JPEG с минимальной степенью сжатия. Качество: 95. Вес: 169 килобайт.
Для третьей картинки мы задали уровень качества 95, из-за чего её вес стал 169 килобайт. Вторая и третья картинка внешне почти неразличимы, однако вторая картинка весит на 104 килобайта легче.
Таким образом, формат JPEG лучше подходит для:
- полноцветных изображений, фотографий;
- изображений, с плавным переходом яркости и контраста;
- рисунков с большим количеством разноцветных деталей.
2. Формат файла BMP
Формат RGB в Windows
В Windows распространенными форматами RGB являются RGB1, RGB4, RGB8, RGB565, RGB555, RGB24, RGB32, ARGB32 и т. Д. В качестве подтипа типа мультимедийного видео, и соответствующие им идентификаторы GUID показаны в таблице ниже.
GUID | Описание формата |
---|---|
MEDIASUBTYPE_RGB1 | 2 цвета, каждый пиксель представлен 1 битом, нужна палитра |
MEDIASUBTYPE_RGB4 | 16 цветов, каждый пиксель представлен 4 битами, требуется палитра |
MEDIASUBTYPE_RGB8 | 256 цветов, каждый пиксель представлен 8 битами, нужна палитра |
MEDIASUBTYPE_RGB565 | Каждый пиксель представлен 16 битами, а компоненты RGB используют 5 бит, 6 бит и 5 бит соответственно |
MEDIASUBTYPE_RGB555 | Каждый пиксель представлен 16 битами, а компоненты RGB используют 5 бит (оставшийся 1 бит не используется) |
MEDIASUBTYPE_RGB24 | Каждый пиксель представлен 24 битами, а каждый компонент RGB использует 8 бит |
MEDIASUBTYPE_RGB32 | Каждый пиксель представлен 32 битами, а каждый компонент RGB использует 8 бит (остальные 8 бит не используются) |
MEDIASUBTYPE_ARGB32 | Каждый пиксель представлен 32 битами, и каждый компонент RGB использует 8 бит (остальные 8 бит используются для представления значения альфа-канала) |
SVG (Scalable Vector Graphics)
SVG переводится как — масштабируемая векторная графика. Формат существует с 1999 года.
Размер объектов SVG намного меньше размера растровых изображений, а сами изображения не теряют в качестве при масштабировании. В отличие от растровых форматов мы можем взаимодействовать с изображениями в формате SVG — при помощи CSS можно изменять параметры графики: цвет, прозрачность или границы, а при помощи JavaScript — анимировать изображение.
SVG поддерживается почти всеми браузерами за исключением Internet Explorer 8 и ниже, но и это можно решить подключением JavaScript-библиотек, например, SVGeezy.
IplImage - это основная структура данных части CxCore OpenCV, используемая для представления изображений. Структура IplImage выглядит следующим образом:
Еще два важных элемента для нас: char * imageData и widthStep.
imageDataУкажите «область данных для хранения данных изображения» и «размер упорядоченных строк изображения». Все мы знаем, что изображение состоит из бесчисленных пикселей, и значение каждого пикселя отличается, поэтому изображения, которые мы видим, имеют насыщенные цвета. imageData - это указатель, который указывает на первый адрес данных значения пикселя определенного изображения. Например: (учар) frameimg-> imageData - это первый адрес первой строки изображения.
widthStepУказывает количество байтов, необходимых для хранения строки пикселей. Поскольку память, выделенная opencv, выровнена по 4 байтам, widthStep должен быть кратен 4. Если ширина изображения 8U равна 3, то widthStep равно 4 плюс один байт для его заполнения. Одна строка этого изображения требует 4 байта, используются только первые 3, а последняя пуста. То есть размер данных imageData изображения шириной 3 и высотой 3 равен 4.3 = 12 байт.
Используйте указатель, чтобы перемещаться по пикселям изображения:
1. Одноканальный доступ к пикселям байтового изображения:
Результатом вывода является значение серого цвета от 0 до 255.
где (uchar *) (imgSrc-> imageData + iimgSrc-> widthStep + j)Конкретное значение:
(1) Один метрОдноканальный байтовый образ n, его imageData расположены следующим образом:
(2) imgSrc-> imageData указывает на первый адрес первой строки изображения, i указывает на строку, в которой расположен текущий пиксель, а widthStep указывает на количество байтов, занимаемых каждой строкой изображения; поэтому imgSrc-> imageData + яimgSrc-> widthStep представляет первый адрес строки, в которой расположен пиксель; j представляет столбец, в котором расположен текущий пиксель, поэтому imgSrc-> imageData + iimgSrc-> widthStep + j означает адрес пикселя. И поскольку типом IplImage-> ImageData по умолчанию является тип char, при выполнении операций со значением пикселя изображения используйте принудительное преобразование типа в символ без знака, а затем обработайте его. В противном случае в значениях пикселей изображения будут отрицательные значения.
2. Доступ к пикселям трехканального байтового изображения.
нота:
int step = img->widthStep/sizeof(uchar);
b=data[istep+jchanels+0];
(1) imageData многоканального байтового изображения упорядочены следующим образом:
где (Bi, Bj) (Gi, Gj) (Ri, Rj) представляет значение компонента BGR на изображении (i, j).
(3) Обратите внимание, что основное различие между трехканальным и одноканальным является: трехканальный не использует напрямую widthStep, но использует int step = img-> widthStep / sizeof (uchar) Шаг, но на самом деле sizeof (uchar) = 1. Количество каналов - 3.
istep Когда i = 0 - первая строка на рисунке выше, 1 - вторая строка.
jchanels+0 jКоличество каналов Когда j = 0 - это 0-й канал в первом столбце -> b, это фактически значение B в первом элементе
jchanels+1 jКоличество каналов Когда j = 0 - это первый канал в первом столбце -> g, это фактически значение G в первом элементе
jchanels+2 jКоличество каналов Когда j = 0 - второй канал в первом столбце -> r, это фактически значение R первого элемента.
jканалы + 0 Когда j = 1, 1X3 + 0 = 3, то есть 0-й канал во втором столбце -> b, который на самом деле является значением B во втором элементе
jканалы + 1 Когда j = 1, 1X3 + 1 = 4, это первый канал во втором столбце -> g, который на самом деле является значением G во втором элементе
PS:
1. Различайте widthStep и width:
В процессе изучения OpenCV используйте структуру IPLImage, чтобы определить разницу между widthStep и width при вызове данных:
(1) width представляет количество пикселей изображения, которое является горизонтальной длиной изображения.
(2) widthStep - длина сохраненного массива, равная ширине.Каналы (количество каналов), например, для изображений BGR есть три канала widthStep = width3; изображение в градациях серого имеет только один канал widthStep = width.
2. Изображение с плавающей точкой и байтовое изображение:
Во-первых, канал относится к слою. Наше общее трехканальное изображение представляет собой изображение трех слоев RGB. Сложение трех изображений вместе - это изображение. Изображение канала - это изображение в градациях серого, а проще говоря - черно-белое изображение.Так называемые однобайтовые символы с плавающей запятой относятся к типу данных, в котором хранится матрица изображения., Существует тип char (однобайтный) с плавающей запятой (тип с плавающей запятой), где каждый элемент в матрице представляет пиксель, поэтому чем больше битов типа, тем больше цветов он представляет, как если бы один байт мог только Представляет цвет в 255, а тип с плавающей запятой может представлять 32-битный цвет, который равен 2 в 32-й степени минус один цвет.
Изображение имеет несколько каналов, а изображение в оттенках серого - один канал. Цветные изображения обычно состоят из трех компонентов: красного, зеленого и синего (OpenCV хранит эти три компонента в синем, зеленом и красном) . Каждый пиксель использует несколько бит для хранения, называемыхГлубина изображения(Глубина изображения). дляИзображение в оттенках серого, Каждый пиксель обычно хранится как 8 бит, поэтому допускается 256 (0 ~ 255) уровней серого. дляЦветное изображение, Каждый пиксель хранится как 3 байта, а каждый цветовой канал занимает один байт.
Проще говоря, растровое изображение - это изображение, состоящее из одного пикселя. Распространенными форматами изображений являются jpg (jpeg), png и bmp, все они растровые.
2.2 Составление формата файла BMP
Файл BMP состоит из следующих четырех частей:
- Заголовок растрового файла (BITMAPFILEHEADER)
- Заголовок растровой информации (BITMAPINFOHEADER)
- Таблица цветов * (RGBQUAD [])
- Массив пикселей (Pixels [] [])
Поскольку таблица цветов не обязательно существует, добавьте * Описание.
Кратко объясним информацию о каждой части ниже:
2.2.1 Заголовок растрового файла
Используется для описания состояния всего файла BMP, включая такую информацию, как тип, размер файла и начальная позиция растрового изображения файла BMP.
Заголовок файла растрового изображения имеет в общей сложности14 байт。
2.2.2 Заголовок информации о растровом изображении
Используется для описания такой информации, как размер растрового изображения.
Общий заголовок информации о растровом изображении40 байт。
2.2.3 Таблица цветов
Он используется для описания цвета в растровом изображении.Он имеет несколько элементов таблицы.Каждый элемент таблицы представляет собой структуру типа RGBQUAD, которая определяет цвет.
Вы можете видеть, что запись в таблице RGB4 байта。
Количество данных структуры RGBQUAD в таблице цветов определяется заголовком информации о битовой карте.biBitCountЧтобы убедиться:
- Когда biBitCount = 1, 4, 8, есть 2, 16 и 256 записей соответственно.
- При biBitCount = 24 элемент таблицы цветов отсутствует.
2.2.4 Массив пикселей
l Запишите значение каждого пикселя растрового изображения, порядок записи - слева направо в пределах строки развертки и снизу вверх между строками развертки. Количество байтов, занимаемых значением пикселя растрового изображения, выглядит следующим образом:
Когда biBitCount = 1, 8 пикселей занимают 1 байт;
Когда biBitCount = 4, 2 пикселя занимают 1 байт;
Когда biBitCount = 8, 1 пиксель занимает 1 байт;
Когда biBitCount = 24, 1 пиксель занимает 3 байта: R, G, B;
Windows оговаривает, что количество байтов, занимаемых строкой сканирования, должно быть кратно 4 (то есть в единицах длины), и если этого недостаточно, оно заполняется 0.
Три, пример формата файла BMP анализа
Откройте файл grey8.bmp с помощью notepad ++, выберите плагин -> HEX-Editor -> Просмотреть в HEX, если нет, вы можете выбрать управление плагином для установки, окончательный интерфейс выглядит следующим образом:
Это необходимо для отображения информации об изображении в шестнадцатеричной форме, шестнадцатеричное число занимает 4 бита, поэтому одна строка представляет шестнадцать байтов.
Прежде чем анализировать файл BMP, мы должны сначала понять порядок хранения данных:
В файле BMP, если часть данных должна быть представлена несколькими байтами, порядок байтов данных следующий: «младший адрес для хранения младших данных и высокий адрес для хранения высоких данных». Например, порядок хранения данных 0x1756 в памяти:
Этот метод хранения называется прямым порядком байтов (little endian), а противоположный - big endian.
3.1 Заголовок растрового файла
Красный прямоугольник на рисунке ниже - это заголовок файла растрового изображения:
Первые два байта (0, 1) указывают тип файла растрового изображения, а именно 0x4d42 Представляет тип BMP, который совпадает с Первые два байта в DUMP обозначают один и тот же символ BM. 。
Следующие четыре байта (2, 3, 4, 5) указывают размер файла растрового изображения, а именно 0x0000c436 Представляет размер файла точечного рисунка, преобразованного в десятичное значение 50230, мы открываем свойства grey8.bmp и обнаруживаем, что его размер действительно составляет 50230 байт:
Следующие два байта (6, 7) - это зарезервированные слова файла битовой карты 1, которые должны иметь значение 0, то есть 0x0000.
Следующие два байта (8, 9) - это зарезервированное слово 2 файла битовой карты, которое должно быть 0, то есть 0x0000.
Последние четыре байта (a, b, c, d) являются начальной позицией данных растрового изображения, и его значение равно 0x00000436, которое преобразуется в десятичное число 1078. Он представляет собой количество байтов от начала файла до массива пикселей, то есть его размер: заголовок файла растрового изображения (14 байтов) + заголовок информации о растровом изображении (40 байтов) + [256 записей * 4 слова Раздел], потому что запись в таблице цветов не обязательно существует, поэтому используйте [] Приложите. В изображении grey8.bmp есть таблица цветов, поэтому начальное значение растровых данных - 1078.
3.2 Заголовок информации о растровом изображении
Первые четыре байта (e, f в первой строке, 0, 1 во второй строке) представляют количество байтов, занятых заголовком информации о битовой карте, то есть 0x00000028, что при преобразовании в десятичное число равно 40;
Последние четыре байта (2, 3, 4, 5 во второй строке) - это ширина растрового изображения в пикселях, то есть 0x00000100, которое преобразуется в десятичное число 256, что согласуется с реальной ситуацией.
Последние четыре байта (6, 7, 8, 9 во второй строке) - это высота растрового изображения в пикселях, то есть 0x000000c0, которое преобразуется в десятичное 192, что согласуется с реальной ситуацией.
Последние два байта (a, b во второй строке) - это уровень целевого устройства, который должен быть 1, а его значение - 0x0001, что соответствует.
Последние два байта (c, d во второй строке) - это количество битов, необходимых для каждого пикселя, и их значение равно 0x0008, что соответствует фактической битовой глубине.
Последние четыре байта (e, f во второй строке, 0, 1 в третьей строке) указывают тип сжатия битовой карты, и его значение равно 0x00000000, то есть без сжатия.
Последние четыре байта (2, 3, 4, 5 в третьей строке) - это размер растрового изображения, в байтах, значение 0x0000c000, преобразованное в десятичное число 49152, по сути, для вычисления размера массива пикселей, вычислить способ:
b i S i z e I m a g e = Фигура Нравиться из ширина степень ∗ высоко степень ∗ Кусочек глубокий степень / 8 biSizeImage = ширина изображения * высота * битовая глубина / 8 b i S i z e I m a g e = Фигура Нравиться из ширина степень ∗ высоко степень ∗ Кусочек глубокий степень / 8
в изображении grey8.bmp
b i S i z e I m a g e = 256 ∗ 192 ∗ 8 / 8 = 49152 biSizeImage=256*192*8/8=49152 b i S i z e I m a g e = 2 5 6 ∗ 1 9 2 ∗ 8 / 8 = 4 9 1 5 2
Последние четыре байта (6, 7, 8, 9 в третьей строке) представляют горизонтальное разрешение растрового изображения, и его значение равно 0x00002e23.
Последние четыре байта (a, b, c, d в третьей строке) представляют разрешение битовой карты по вертикали, и его значение равно 0x00002e23.
Последние четыре байта (e, f в третьей строке, 0, 1 в четвертой строке) представляют количество цветов в таблице цветов, фактически используемых растровым изображением, и его значение - 0x00000000, обычно равное 0.
Последние четыре байта (2, 3, 4, 5 в четвертой строке) представляют количество важных цветов в процессе отображения растрового изображения, и его значение равно 0x00000000, как правило, равному 0.
3.3 Таблица цветов
Когда битовая глубина равна 24, таблица цветов отсутствует, а за заголовком информации о растровом изображении следует массив пикселей;
Когда битовая глубина не 24, есть таблица цветов, а есть 2 Битовая глубина Каждый элемент таблицы цветов занимает 4 байта.
В желтом поле, как показано на рисунке ниже, находится 256 элементов таблицы цветов с общим размером 256 * 4 байта (показана только его часть):
Поскольку каждый элемент таблицы цветов занимает 4 байта, мы делим элемент таблицы цветов на один элемент таблицы цветов, то есть черный ящик, в единицах по 4 байта.
Поскольку grey8.bmp является изображением в градациях серого, элементы его таблицы цветов основаны на правилах.
В записи таблицы цветов три компонента RGB равны, а четвертый компонент равен 0; во всей таблице цветов значение первых трех компонентов записи таблицы цветов увеличивается на 1 от 0 до 255. Фактически, rgb (0,0,0) представляет черный, rgb (255,255,255) представляет белый, rgb (x, x, x) (x не равно 0 или 255, x является целым числом от 0 до 255) представляет разные градусов серого.
Когда файл BMP представляет собой псевдоцветное изображение, его битовая глубина составляет 8 бит, но нет правила, которому следует следовать. Например, первый элемент таблицы цветов - это rgb (1,22,3,0), второй элемент таблицы цветов - это rgb (10,89,90,0) и т. Д. Это не черный, белый и серый цвета, а другие цвета. Однако они могут отображать только до 256 цветов, что намного меньше, чем 16 миллионов цветов полноцветных изображений. Поэтому такие изображения называются псевдоцветными изображениями.
3.4 Массив пикселей
После таблицы цветов (или заголовка информации о растровом изображении) идет массив пикселей. В этом примере битовая глубина равна 8, поэтому один байт представляет один пиксель. Как определить цвет этого пикселя? Диапазон одного байта составляет [0,255], теперь вы должны понять! Найдите соответствующий элемент таблицы цветов в соответствии со значением этого байта, и цвет, соответствующий этому элементу таблицы цветов, является цветом этого пикселя. Вот как это работает для BMP с таблицами цветов.
Для изображения с истинным цветом его битовая глубина равна 24, и один пиксель, естественно, соответствует трем цветовым компонентам R, G и B, поэтому нет необходимости в таблице цветов, а для изображения с истинным цветом, если есть таблица цветов, то есть более чем 16 миллионов элементов таблицы цветов, весь файл будет очень большим.
1.3 Разница между растровым изображением и векторной диаграммой
Наиболее очевидная разница между растровым изображением и векторной диаграммой:Мозаика появится, когда растровое изображение будет увеличено, и качество изображения ухудшится; векторную графику можно бесконечно увеличивать без снижения качества изображения.
Источник изображения: Википедия
На рисунке a представляет исходное изображение. Если a - векторная диаграмма, когда изображение в красной рамке увеличивается, эффект аналогичен b, и вы можете видеть, что качество изображения не снизилось; если a - растровое изображение, когда изображение в красной рамке увеличивается , эффект похож на c, и отчетливо видны один за другим маленькие квадратики, качество изображения значительно снижается.
Формат NV12
NV12 - это формат плоскости 4: 2: 0. Канал цветности должен быть дискретизирован с коэффициентом 2 в горизонтальном и вертикальном направлениях, с 12 битами на пиксель.
В формате NV12 все сэмплы Y сначала отображаются в памяти в виде массива значений без знака, а число строк является четным. Массив значений unsigned char следует сразу за плоскостью Y, который содержит упакованные выборки U (Cb) и V (Cr), как показано на следующем рисунке:
Когда объединенный массив U-V рассматривается как массив значений WORD с прямым порядком байтов, младший бит содержит значение U, а MSB содержит значение V.
NV12 является предпочтительным форматом пикселей 4: 2: 0 для DirectX VA.
Я написал образец для демонстрации взаимного преобразования между форматами RGB / YUY2 / NV12, нажмитеВот Загрузка (скомпилированная программа, а не код, и точки загрузки автоматически настраиваются CSDN, я ничего не могу сделать> _>).
– EOF –
Формат графического файла определяет способ хранения графической информации в файле (растровый или векторный), а также форму хранения информации (используемый алгоритм сжатия для уменьшения объёма файла).
Растровые форматы используются для хранения растровых данных. Файлы этого типа особенно хорошо подходят для хранения реальных изображений, например фотографий и видеоизображений.
Растровые файлы, по сути дела, содержат точную попиксельную карту изображения. Программа визуализации реконструирует это изображение на отображающей поверхности устройства вывода.
С форматом BMP работает огромное количество программ, так как его поддержка интегрирована в операционные системы Windows и OS/2.
Формат BMP поддерживается всеми графическими редакторами, работающими под ее управлением, способен хранить как индексированный (до 256 цветов), так и RGB-цвет ( 16,7 млн. оттенков).
— стандартный растровый формат представления изображений в WWW.
Формат GIF позволяет хорошо сжимать файлы, в которых много однородных заливок (логотипы, надписи, схемы), записывать изображение "через строчку" (Interlaced mode), благодаря чему, имея только часть файла, можно увидеть изображение целиком, но с меньшим разрешением.
Применяется для хранения рисунков и анимации в Интернете.
TIFF может сохранять векторную графику программы Photoshop, Alpha-каналы для создания масок в видеоклипах Adobe Premiere и др.
Имена файлов TIFF используют расширение *.tiff и *.tif.
Алгоритм JPEG в наибольшей степени пригоден для сжатия фотографий и картин, содержащих реалистичные сцены с плавными переходами яркости и цвета. Наибольшее распространение JPEG получил в цифровой фотографии и для хранения и передачи изображений с использованием сети Интернет.
JPEG не подходит для сжатия изображений при многоступенчатой обработке, так как искажения в изображения будут вноситься каждый раз при сохранении промежуточных результатов обработки.
Формат PSD обеспечивает хранение полноцветных изображений со всеми их особенностями, каналами, масками, различными слоями, векторными фигурами, контурами, эффектами и т.п., известными и понятными только этой программе. Особо рекомендуется использовать при работе с Photoshop.
Векторные изображения состоят из математических формул, описывающих простые графические объекты, из которых и состоит векторный файл. Такой файл содержит информацию о том, где и какой объект находится.
Векторные изображения различных форматов различает способ их создания и принципы кодирования графических объектов.
Хороший верстальщик должен уметь правильно выбирать форматы изображений для своей вёрстки, чтобы изображения отображались без погрешностей и имели оптимальный размер при загрузке. Давайте разберёмся, какие бывают форматы изображений и в каких ситуациях лучше выбрать тот или иной формат.
Формат YUV в Windows
В Windows распространенные форматы YUV включают YUY2, YUYV, YVYU, UYVY, AYUV, Y41P, Y411, Y211, IYUV, YV12, YVU9, NV12 и т. Д. В качестве подтипа типа видеосигнала и соответствующие им GUID. Смотрите таблицу ниже.
GUID | Описание формата |
---|---|
MEDIASUBTYPE_YUY2 | Формат YUY2, упакованный в формате 4: 2: 2 |
MEDIASUBTYPE_YUYV | Формат YUYV (фактический формат такой же, как YUY2) |
MEDIASUBTYPE_YVYU | Формат YVYU, упакованный в формате 4: 2: 2 |
MEDIASUBTYPE_UYVY | Формат UYVY, упакованный в формате 4: 2: 2 |
MEDIASUBTYPE_AYUV | Формат YUV 4: 4: 4 с альфа-каналом |
MEDIASUBTYPE_Y41P | Формат Y41P, упакованный в 4: 1: 1 |
MEDIASUBTYPE_Y411 | Формат Y411 (фактический формат такой же, как у Y41P) |
MEDIASUBTYPE_Y211 | Формат Y211 |
MEDIASUBTYPE_IYUV | Формат ИЮВ |
MEDIASUBTYPE_YV12 | Формат YV12 |
MEDIASUBTYPE_NV12 | Формат NV12 |
YUV отбор проб
Одним из преимуществ YUV является то, что частота дискретизации канала цветности может быть ниже, чем у канала Y, без существенного ухудшения визуального качества. Существует обозначение, которое можно использовать для описания отношения частоты дискретизации U и V к Y. Это обозначение называется обозначением A: B: C:
- 4: 4: 4 означает, что канал цветности не имеет понижающей дискретизации. 32 бита на пиксель (плюс альфа-канал).
- 4: 2: 2 означает горизонтальную понижающую дискретизацию 2: 1, без вертикальной понижающей дискретизации. Для каждых двух выборок U или V выборок каждая строка сканирования содержит четыре Y выборки. 16 бит на пиксель.
- 4: 2: 0 означает горизонтальную понижающую дискретизацию 2: 1 и вертикальную понижающую выборку 2: 1. 12 бит на пиксель.
- 4: 1: 1 означает горизонтальную понижающую дискретизацию 4: 1, без вертикальной понижающей дискретизации. Для каждого образца U или образца V каждая строка сканирования содержит четыре образца Y. 12 бит на пиксель.
Растровые форматы
Для начала рассмотрим форматы, которые относятся к растровой графике: GIF, JPEG, PNG и WebP. Подробнее о растровой графике можно прочитать в статье «Растровая и векторная графика».
Основные характеристики, которые нас будут интересовать при выборе формата — это качество изображения, вес и количество цветов. В вебе тяжёлые изображения непрактичны, поскольку они долго загружаются. Чтобы уменьшить вес файла, используются алгоритмы сжатия. Сжатие может быть с потерями и без потерь. При выборе подходящего формата изображения, нам нужно найти баланс между весом файла и качеством картинки, так как некоторые алгоритмы сжимают изображения с потерей качества. Теперь рассмотрим каждый из форматов подробнее.
1.4 Как выразить цвет пикселей
Выберите растровое изображение и увеличьте масштаб до 3200% в PS, как вы можете видеть ниже:
Вы можете ясно видеть один за другим маленькие квадратики, которые являются пикселями.
Пиксель имеет определенное положение и значение цвета. Цвет каждого пикселя представлен комбинацией RGB или значением серого.
В этом разделе основное внимание уделяется тому, как представлять цвета.
По битовой глубине растровые изображения можно разделить на 1, 4, 8, 16, 24 и 32-битные изображения. Битовая глубина здесь относится к количеству битов, используемых для представления цвета пикселя. Если пиксель представлен одним битом цвета, его битовая глубина равна 1, если пиксель представлен четырьмя битами цвета, его битовая глубина равна 4 и так далее.
- Если пиксели изображения1 битДля представления цвета этот бит равен 0 или 1, тогда он может представлять 2 1 Два цвета, а именно черный и белый, фото чисто черно-белое фото.
Если пиксели изображения8 битДля представления цвета эти восемь битов могут представлять 2 8 Цвета, 256. Такой образобычно(Есть исключения, я расскажу об этом ниже) называетсяОттенки серого, Потому что эти 256 цветов являются черным и белым серым (серый здесь означает 244 различных степени серого). Изображение в градациях серого выглядит следующим образом:
Если пиксели изображения24 битДля представления цвета эти 24 бита могут представлять 2 24 Есть более 16 миллионов цветов. Это изображение называетсяКарта истинного цвета. Эти 24 бита разделены на три канала по 8 бит, которые представляют красный, зеленый и синий соответственно. Это метод цветового кодирования RGB, который использует оптическую интенсивность трех основных цветов - красного, зеленого и синего - для представления цвета. Это наиболее распространенный метод кодирования растровых изображений, который можно напрямую использовать для отображения на экране.
Четыре, расширенный эксперимент
Примечания: Формула преобразования из RGB в шкалу серого: Серый = R * 0,299 + G * 0,587 + B * 0,114
PNG (Portable Network Graphics)
PNG является относительно недавним форматом, который был введён как альтернатива для GIF-файлов.
PNG является форматом сжатия без потерь и позволяет сохранять изображения, в которых требуется особенная чёткость. Например, чертежи и печатный текст.
Формат имеет две вариации: PNG8 и PNG24. PNG8 может хранить лишь 256 цветов, а PNG24 использует уже более 16 миллионов цветов.
Главная особенность формата PNG — поддержка альфа-прозрачности, то есть каждому пикселю в отдельности можно задать свою степень прозрачности.
Пример изображения в формате PNG (источник изображения: Wikimedia Commons)
Итак, формат PNG подходит для:
- изображений с прозрачностью и полупрозрачностью;
- когда необходима повышенная точность полноцветных изображений;
- изображений с резкими переходами цветов.
WebP — новый формат, созданный и развиваемый с 2010 года компанией Google.
Главная цель этого проекта — ещё больше уменьшить вес при сохранении такого же качества.
Формат использует новый алгоритм сжатия, в котором искажения отличаются от искажений других форматов. Ухудшается детализация и структура, в то время как края остаются чёткими.
- сжимает изображения без потерь лучше, чем PNG (на 26% по данным Google);
- сжимает изображения с потерями лучше, чем JPEG (на 25–34% по данным Google);
- поддерживает прозрачность (альфа-канал).
Иногда WebP сжимает изображение даже лучше, чем заявляет Google.
JPEG: 44 килобайт WebP: 26 килобайт. Если изображение не видно, значит ваш браузер не поддерживает формат WebP.
Ввиду относительной новизны формата, не все браузеры умеют с ним работать. На сегодняшний день WebP поддерживается только Chrome, Opera и Firefox.
Поверхность (Surface) определение
- Начало координат: для формата YUV, описанного в этой статье, начало координат (0,0) всегда находится в верхнем левом углу поверхности.
- Шаг: шаг поверхности, иногда называемый интервалом, относится к ширине поверхности, выраженной в байтах. Для поверхности, начало которой находится в верхнем левом углу, интервал всегда положительный.
- Упакованный формат и формат плоскости: формат YUV можно разделить на упакованный формат (упакованный) и формат плоскости (плоский). В упакованном формате компоненты Y, U и V хранятся в массиве. Пиксели организованы в несколько макропиксельных групп, и расположение макропиксельных групп зависит от формата. В формате плоскостей компоненты Y, U и V хранятся в виде трех отдельных плоскостей.
Три, эксперимент с кодом
3.1 Экспериментальная среда
- Операционная система: Windows 10
- Компилятор: Dev-cpp, Visual Studio 2017
3.2 Содержание эксперимента
Измените элементы таблицы цветов изображения в градациях серого gray8_test.bmp ниже на случайные значения и превратите исходное изображение в оттенках серого в псевдоцветное изображение.
3.3 Другая информация
Три структуры BITMAPFILEHEADER, BITMAPINFOHEADER и RGBQUAD находятся вwindows.hОпределено в
3.4 Код ключа
Поскольку код имеет подробные комментарии, он не будет здесь подробно объяснен.
- Прочтите соответствующую информацию:
- Используйте функцию случайных чисел для изменения элементов таблицы цветов
- Запишите прочитанную информацию в целевой файл
- Чтение и запись информации о пикселях, обратите внимание на четырехбайтовое выравнивание
3.5 Внимание! ! !
- Откройте файл в двоичном виде! ! ! ! ! ! !
- Обратите внимание, что количество байтов, занимаемых строкой пикселей, кратно 4. При чтении файла считайте больше 0 байтов, добавленных позже; при записи файла запишите еще 0 байтов, которые необходимо заполнить. В противном случае изображение может быть неупорядоченным.
3.6 Результаты
С помощью нашей программы генерируются следующие картинки, которые довольно красивы!
3.7 Полный код
Структура файла растрового изображения DIB (Bitmap)
Независимое от устройства растровое изображение (Device Independent Bitmap) представляет собой файл растрового изображения, который можно сохранить на диске. Его файловая структура стандартизирована и может отображать тот же эффект на платформах, таких как Windows / Linux / Unix.
Файл DIB (.bmp) состоит из 4 частей:
Формат YUY2
YUY2 - это упакованный формат 4: 2: 2, где каждый гигантский пиксель представляет собой два пикселя, закодированных в виде четырех последовательных байтов, то есть 16 бит на пиксель. Это приведет к снижению уровня цветности в 2 раза.
В формате YUY2 данные можно просматривать в виде массива значений без знака, где первый байт содержит первую выборку Y, второй байт содержит первую выборку U (Cb) и третий Каждый байт содержит второй образец Y, а четвертый байт содержит первый образец V (Cr). Расположение памяти показано на рисунке ниже:
Если изображение рассматривается как массив из двух значений WORD с младшим порядком байтов, первое WORD содержит Y0 в младшем значащем бите (LSB) и старшем значащем бите (MSB) ) Содержит U. Второе слово содержит Y1 в LSB и V в MSB.
YUY2 - это предпочтительный формат 4: 2: 2 пикселя для Microsoft DirectX® Video Acceleration (DirectX VA).
GIF (Graphics Interchange Format)
Формат был разработан компанией CompuServe в далёком 1987 для передачи растровых изображений по интернету. GIF имеет цветовую палитру, состоящую из 256 цветов. Алгоритм GIF выбирает 256 наиболее используемых в исходном изображении цветов, а все остальные оттенки создаются путём подмешивания — подбора соседних пикселей таким образом, чтобы человеческий глаз воспринимал их как нужный цвет. По этой причине GIF не подходит для хранения полноцветных изображений и фотографий.
Формат поддерживает прозрачность — каждый пиксель изображения может быть в двух состояниях: прозрачный или непрозрачный, полупрозрачность не поддерживается.
Особенностью GIF является поддержка анимации, то есть этот формат может хранить несколько кадров, которые сменяют друг друга с определённой частотой.
Таким образом, формат GIF подходит если:
- изображение не многоцветное;
- нужна простейшая прозрачность;
- нужна анимация.
Пять, справочные материалы
[2] Мультимедийные материалы по базовому курсу
[3] Введение в Википедии о «растровом изображении», «векторной диаграмме» и «формате BMP»
Формат RGB24 и RGB32
RGB24 использует 24 бита для представления пикселя, все компоненты RGB представлены 8 битами, а диапазон значений составляет 0-255. Обратите внимание, что порядок компонентов RGB в памяти режима с прямым порядком байтов: BGR BGR BGR…. Обычно вы можете использовать структуру данных RGBTRIPLE для управления пикселем, который определяется как:
RGB32 использует 32 бита для представления пикселя, каждый из компонентов RGB использует 8 бит, а оставшиеся 8 бит используются как альфа-каналы или нет. (ARGB32 - это RGB32 с альфа-каналом). Обратите внимание, что последовательность компонентов RGB в памяти: BGRA BGRA BGRA…. Обычно вы можете использовать структуру данных RGBQUAD для управления пикселем, который определяется как:
В современных системах цветного телевидения для съемки обычно используются трехкамерные цветные камеры или цветные ПЗС-камеры, а затем захваченные сигналы цветного изображения разделяются, усиливаются и корректируются для получения RGB, а затем сигнал яркости Y и два получают через схему матричного преобразования. Цветоразностный сигнал R-Y (то есть U или Cb), B-Y (то есть V или Cr) и, наконец, передающая сторона кодирует три сигнала яркости и цветовой разности и отправляет их по одному и тому же каналу. Этот метод представления цвета представляет собой так называемое представление цветового пространства YUV.
Важность использования цветового пространства YUV состоит в том, что его сигнал яркости Y и сигналы цветности U и V разделены. Если присутствует только компонент сигнала Y, но нет компонентов U и V, изображение, представленное таким образом, является черно-белым изображением в градациях серого. Цветной телевизор использует пространство YUV для решения проблемы совместимости цветного телевизора и черно-белого телевизора с сигналом яркости Y, поэтому черно-белый телевизор также может принимать сигналы цветного телевидения.
Формула для взаимного преобразования между YUV и RGB выглядит следующим образом (значения RGB находятся в диапазоне от 0 до 255):
2.1 Введение в BMP
BMPВзято из сокращения bitmap Bitmap, также известного как DIB (device-independent bitmap), является независимым от дисплеябитовая картаФормат файла цифрового изображения. Обычно встречается в операционных системах Microsoft Windows и OS / 2. ---- Википедия
Формат BMP - это формат, представляющий растровое изображение.
Разрядность пикселей в изображениях формата BMP может быть 1, 4, 8, 24, 32, но обычные битовые глубины BMP по-прежнему равны 8 и 24.
Выберите изображение BMP, щелкните правой кнопкой мыши, чтобы открыть Свойства -> Детали, вы можете просмотреть его битовую глубину.
Когда битовая глубина файла BMP равна 8, это не обязательно означает, что изображение в оттенках серого, как показано ниже:
Разрядность этого изображения составляет 8, но это не изображение в оттенках серого, мы его называемПсевдоцветная карта。
Следующее изображение представляет собой полноцветное изображение с битовой глубиной 24, которое можно использовать для сравнения:
Видно, что качество изображения в истинных цветах значительно выше, чем у изображения в ложных цветах.
Читайте также: