openCV: добавление прозрачности в IplImage

У меня есть 3-канальный IplImage. Я хотел бы создать 4-канальное изображение и установить для него значение альфа-канала менее 1,0, чтобы сделать его полупрозрачным.

Сначала я установил альфа-канал (4-й канал) на 0,5:

cvSet(Image_c4, cvScalar(0,0,0,0.5);

Вот команда, которую я использовал для копирования 3-канального изображения в 4-канальное.

cvCvtColor(Image_c3, Image_c4, CV_RGB2RGBA);

Проблема: Image_c3 цветной. Image_c4 становится копией Image_c3 в оттенках серого (и без прозрачности).

Обновление: оказалось, что приведенный выше код на самом деле правильный и работает, и на самом деле он более лаконичен, чем предлагаемые решения в ответах ниже. У меня была несвязанная ошибка где-то еще.


person RawMean    schedule 11.10.2011    source источник


Ответы (1)


Может быть, есть другой способ, но я добавляю прозрачность следующим образом:

// BGR split
cvSplit(im1_bgr, im1_b, im1_g, im1_r, NULL);

// Alpha channel creation (transparency)
IplImage *im1_a = cvCreateImage(cvGetSize(im1_bgr), 8, 1);
// Set the alpha value
cvSet(im1_a, cvScalar(128), NULL);

// Merge the 4 channel to an BGRA image
IplImage *im1_bgra = cvCreateImage(cvGetSize(im1_bgr), 8, 4);
cvMerge(im1_b, im1_g, im1_r, im1_a, im1_bgra);
person Turgal    schedule 11.10.2011
comment
Спасибо что нашли время ответить. Оказалось, что код в моем вопросе был на самом деле правильным, и у меня была еще одна не связанная с этим ошибка. Ваш код тоже правильный, но cvCvtColor делает то же самое, но намного проще. - person RawMean; 12.10.2011