Альфа-канал (alpha channel) — это значение, точно такое же, как цветовые компоненты (красный, зеленый и синий). Оно определяет степень прозрачности для каждого пикселя изображения.
Однако, OpenCV пока не умеет работать с 4-канальными изображениями RGBA (как ни трудно догадаться A — это и есть обозначение альфа-канала). При загрузке RGBA изображения оно просто преобразуется в RGB.
Однако, OpenCV реализует операцию альфа-смешивания (alpha blending) — т.е. наложение изображений друг на друга с целью создания эффекта частичной прозрачности.
Этого эффекта можно добиться используя функцию cvAddWeighted().
— взвешенная поэлементная сумма двух массивов
формула:
dst = src1 * alpha + src2 * beta + gamma
src1 — первый исходный массив
alpha — вес элементов первого массива
src2 — второй исходный массив
beta — вес элементов второго массива
gamma — добавочная величина к каждой сумме
dst — массив для сохранения результата
массивы должны иметь одинаковый тип и размер (или размер ROI)
А вот и пример работы данной функции:
Загружаем два изображения, причём первое должно быть больше второго, т.к. на изображении image с помощью cvSetImageROI() выделяется область интереса размером со второе изображение.
Затем пиксели ROI первой картинки и пиксели второй картинки поэлементно складываются с весовыми коэффициентами alpha = 0.5 и beta = 0.5, соответственно и получается нужный эффект альфа-смешивания.
Подскажите, пожалуйста, как реализовать soft light смешивание с учетом прозрачности. Интересно как это выглядит при попиксельной обработке.
Нашел формулу
Комментарии (1)
RSS свернуть / развернутьНашел формулу
Но как реализовать, учитывая прозрачность, не понимаю.
Zaph
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.