openCV: добавление прозрачности в IplImage - PullRequest
3 голосов
/ 11 октября 2011

У меня есть 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);

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

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

Ответы [ 2 ]

5 голосов
/ 11 октября 2011

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

// 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);
0 голосов
/ 31 марта 2015
//This code help to make a transparency image But it take src image as one //single color background see![Removing background and added black background color  ][1]
Mat dst;//(src.rows,src.cols,CV_8UC4);
Mat tmp,alpha;

cvtColor(src,tmp,CV_BGR2GRAY);
threshold(tmp,alpha,0,255,THRESH_BINARY);

Mat rgb[3];
split(src,rgb);

Mat rgba[4]={rgb[0],rgb[1],rgb[2],alpha};
merge(rgba,4,dst);
imwrite("dst.png",dst);
//dst is transparency image see here![output image as transparency image][2]


  [1]: http://i.stack.imgur.com/9THqs.png
  [2]: http://i.stack.imgur.com/mpmgy.png
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...