Как изменить размер изображения в C ++? - PullRequest
0 голосов
/ 28 октября 2010

У меня есть изображение, которое представляет Array2D:

template<class T = uint8_t>
Array2D<T> mPixData[4];  ///< 3 component channels + alpha channel.

Комментарий находится в библиотеке.У меня нет никаких подсказок по поводу объяснения.

Может ли кто-нибудь:

  1. объяснить, что представляют собой 3-компонентные каналы + альфа-канал о

  2. показать, как я могу изменить размер этого изображения на основе mPixData

Ответы [ 4 ]

2 голосов
/ 28 октября 2010

Не знаю, что это за библиотека, вот вам удар в темноте:

  1. Определение типа подразумевает, что оно создает двумерный массив беззнаковых символов (что позволяет хранить значения до 255.

    template<class T = uint8_t> Array2D<T>

  2. Тогда mPixData сам по себе является массивом, который подразумевает, что в каждой координате у вас есть четыре значения (байты для сопоставления), 3 для цвета (скажем, RGB, но может быть что-то еще) и 1 для альфа.

  3. «Образ» - это в основном этот трехмерный массив. Предположительно, при загрузке материала в него, он изменяет размер для ввода - вам нужно найти какой-то алгоритм изменения размера (я не эксперт по обработке изображений, но я уверен, что Google что-то раскроет), который затем позволит вам принять эти данные и делай, что тебе нужно ...

1 голос
/ 28 октября 2010

Привет, 3 канала - это канал rgb + alpha.Так что красный зеленый и синий каналы и альфа-канал.Есть несколько методов для уменьшения масштаба.Вы можете взять, например, каждые 4 пикселя, но результат будет выглядеть довольно плохо, взгляните на различные методы интерполяции, например: http://en.wikipedia.org/wiki/Bilinear_interpolation.

Или если вы хотите использовать библиотеку, используйте: http://www.imagemagick.org/Magick++/

или как упомянуто karlphillip: http://www.xdp.it/cximage.htm

1 голос
/ 28 октября 2010

3 компонентных канала представляют собой каналы Red Green Blue (также известный как RGB). Четвертый канал, ALPHA, является каналом прозрачности.

Пиксель определяется как mPixData[4]

mPixData[0] -> R
mPixData[1] -> G
mPixData[2] -> B
mPixData[3] -> A

Следовательно, изображение может быть представлено как вектор или массив mPixData [4]. Как вы уже заявили, в данном случае это Array2D<T> mPixData[4];

Изменение размера / изменение масштаба / повторная выборка изображения не является тривиальным процессом. В интернете доступно много материалов, и я думаю, вам следует подумать об использовании библиотеки для этого. Проверьте CxImage (Windows / Linux).

Здесь есть некоторый код , но я его не проверял. Проверьте функцию resample ().

1 голос
/ 28 октября 2010

1) 3 компонентных канала - Красный Зеленый Синий каналы. Альфа-канал рассказывает о прозрачности изображения

2) Существует множество алгоритмов, которые можно использовать для изменения размера изображения. Простейшим было бы отказаться от лишних пикселей. Еще один простой способ сделать интерполяцию

...