Создание полностью прозрачного цвета в OpenCV - PullRequest
5 голосов
/ 13 июля 2011

У меня есть базовый png-файл с двумя цветами: зеленым и пурпурным.Я собираюсь взять все пурпурные пиксели и сделать их прозрачными, чтобы я мог объединить изображение в другое изображение.

Примером может быть, если у меня есть файл изображения 2D-символа на пурпурном фоне.Я бы удалил все пурпурное на заднем плане, чтобы оно было прозрачным.Оттуда я просто взял изображение персонажа и добавил его как слой в другое изображение, чтобы он выглядел так, как будто персонаж был помещен в окружение.

Заранее спасибо.

Ответы [ 2 ]

9 голосов
/ 15 июля 2011

Я бы использовал этот код,

Сначала загрузите ваше изображение:

IplImage *myImage;
myImage = cvLoadImage("/path/of/your/image.jpg");

Затем используйте маску, подобную этой, чтобы выбрать цвет, вам следует обратиться к документации. Далее я хочу выбрать синий (не забывайте, что в OpenCV изображения имеют формат BGR, поэтому 125,0,0 - синий (соответствует нижней границе), а 255,127,127 - синий с определенным допуском и это верхняя граница. Я выбрал нижнюю и верхнюю границу с допуском, чтобы взять весь синий цвет вашего изображения, но вы можете выбрать все, что захотите ...

cvInRangeS(image, 
           cvScalar(125.0, 0.0, 0.0), 
           cvScalar(255.0, 127.0, 127.0), 
           mask
           );

Теперь мы выбрали маску, давайте обратим ее (так как мы не хотим сохранять маску, но удалить ее)

cvNot(mask, mask);

А затем скопируйте ваше изображение с маской,

IplImage *myImageWithTransparency; //You may need to initialize it before
cvCopy(myImage,myImageWithTransparency,mask);

Надеюсь, это поможет,

Пожалуйста, обратитесь к OpenCVDocumentation для получения дополнительной информации

Вот оно

Julien

0 голосов
/ 13 июля 2011

Это целая тема сама по себе, с рядом решений. Я бы прочитал это сначала:

http://en.wikipedia.org/wiki/Transparency_(graphic)

, затем посмотрите, как эти методы могут быть применены в OpenCV.

...