maxim 0 Жалоба Опубликовано March 23, 2012 Доброго времени суток! Возникла проблема, никак не могу решить. Имеется png изображение с прозрачностью(альфа канал). Загружаю его таким образом: IplImage* img=cvLoadImage("pict.png", CV_LOAD_IMAGE_UNCHANGED); Но при выводе в окно, отсекается альфа канал(изображение становится 3 канальным, с ужасным черным контуром). Погуглив нашел интересную вещь: альфа канал не поддерживается в opencv 2.0. Но у меня opencv 2.3.1 и к тому же на офф. сайте написано: "CV_LOAD_IMAGE_UNCHANGED (<0) loads the image as is (including the alpha channel if present)". Значит выходит что все поддерживается? Но почему тогда выводится "такое" изображение? Очень надеюсь на помощь) Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Smorodov 579 Жалоба Опубликовано March 23, 2012 А загруженное изображение имеет сколько каналов? Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
maxim 0 Жалоба Опубликовано March 24, 2012 Получается что 3 канальное.. Для большего понимания выкладываю фото("blender"- исходное, "blender-2" - выводимое): Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Smorodov 579 Жалоба Опубликовано March 24, 2012 Тут гадать незачем, надо просто свойства изображения посмотреть посмотреть (свойство nChannels). Если трехканальное, то надо какой то либой грузить Png, например DevIL, и препарировать послойно. Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
maxim 0 Жалоба Опубликовано March 24, 2012 Проверил как вы посоветовали. Изображение 4-х канальное! Но почему тогда такое отличие от оригинала? Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Smorodov 579 Жалоба Опубликовано March 24, 2012 Теперь можно функцией cvSplit расщепить изображение по каналам и вывести каждый канал по-отдельности, посмотреть что в каждом из них. Если четвертый канал заполнен правильно, то его надо использовать как маску. То есть нормировать, чтобы он имел значения от 0 до 1 и использовать при наложении изображений. img=img1*mask+img2*(1-mask); Только производить эти действия лучше с действительным типом элементов, иначе все округлится до 0. Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
maxim 0 Жалоба Опубликовано March 24, 2012 Помоему они все попорчены: p.s. просто в opencv новичок, поэтому еще не во всем разобрался Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Smorodov 579 Жалоба Опубликовано March 24, 2012 Нет, они все нормальные. Четвертый и есть альфа-канал. Там где должна быть картинка - белый, там где должен быть фон - черный, а где смесь - серый. Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
mrgloom 242 Жалоба Опубликовано March 26, 2012 всё правильно, дефолтной поддержки альфа-канала у highgui нету. http://opencv.itseez.com/doc/tutorials/core/adding_images/adding_images.html Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах