Я пытаюсь загрузить файлы .png с каналом прозрачности (RGB и Alph) без везения. Похоже, что openCV удаляет 4-й канал из изображения. Есть ли способ загрузить изображение с помощью 4-х каналов, включая альфа-канал, даже если мне пришлось изменить исходный код OpenCV и восстановить его.OpenCV: Как загрузить PNG-изображения с 4-мя каналами?
ответ
По-видимому, OpenCV по-прежнему не поддерживает PNG с альфа-каналом.
hacks to bypass это.
Согласно documentation, OpenCV поддерживает альфа-канал в PNG.
Просто вызовите функцию imread используя CV_LOAD_IMAGE_UNCHANGED как флаги, как это:
cvLoadImage("file.png", CV_LOAD_IMAGE_UNCHANGED)
Согласно ссылке в этом ответе [Чтение и запись изображений и видео] (http://docs.opencv.org/2.4/modules/highgui/doc/reading_and_writing_images_and_video.html), просто поместите отрицательное число как флаг. Никакой 'CV_LOAD_IMAGE_UNCHANGED' не упоминается, но действительно он определен в'/usr/include/opencv2/highgui/highgui_c.h', и он работает с открытым пакетом OpenCV Ubuntu 14.04. –
Если вы используете OpenCV 2 или 3 OpenCV следует использовать IMREAD_ * флаги (как указано в here).
С ++
using namespace cv;
Mat image = imread("image.png", IMREAD_UNCHANGED);
Python
import cv2
im = cv2.imread("image.png", cv2.IMREAD_UNCHANGED)
Странно, что [чтение и запись изображений и видео] (http://docs.opencv.org/2.4/modules/highgui/doc/reading_and_writing_images_and_video.html) не упоминает эти именованные константы. –
Я, наверное, понял это, прочитав исходный код :) –
Правильный путь для чтения прозрачный PNG является использование 4-го канала в качестве альфа-канала. В большинстве случаев вам нужен белый фон, если это так, то ниже код может использоваться для альфа-компоновки.
def read_transparent_png(filename):
image_4channel = cv2.imread(filename, cv2.IMREAD_UNCHANGED)
alpha_channel = image_4channel[:,:,3]
rgb_channels = image_4channel[:,:,:3]
# White Background Image
white_background_image = np.ones_like(rgb_channels, dtype=np.uint8) * 255
# Alpha factor
alpha_factor = alpha_channel[:,:,np.newaxis].astype(np.float32)/255.0
alpha_factor = np.concatenate((alpha_factor,alpha_factor,alpha_factor), axis=2)
# Transparent Image Rendered on White Background
base = rgb_channels.astype(np.float32) * alpha_factor
white = white_background_image.astype(np.float32) * (1 - alpha_factor)
final_image = base + white
return final_image.astype(np.uint8)
Детальный блог здесь here.
- 1. Как загрузить OpenCV на Android?
- 2. XSLT с RSS-каналами
- 3. Одновременно с технологическими каналами
- 4. Feedzirra с несколькими каналами
- 5. Pusher.com - как пользоваться каналами
- 6. Загрузить OpenCV для Pycharm
- 7. API с несколькими канальными каналами
- 8. Golang: Запись одновременно с каналами
- 9. Как использовать изображение с 4 каналами
- 10. Как смоделировать Rx `withLatestFrom` с каналами core.async?
- 11. Как смоделировать вложенные потоки с каналами?
- 12. Копирование SDL_Surfaces с альфа-каналами
- 13. Аутентификация сеанса с каналами Django
- 14. Scala Актер с несколькими каналами
- 15. Галерея Nuget с несколькими каналами
- 16. Bluetooth SPP с несколькими каналами
- 17. Нарушение сегментации с каналами golang
- 18. связь с каналами типа array
- 19. wifi p2p сеть с каналами
- 20. Синхронизация с каналами и goroutines
- 21. создать черное изображение с указанным размером, глубиной, каналами с opencv cv2 module
- 22. Как загрузить видео в opencv (python)
- 23. Не удается загрузить изображение с OpenCV
- 24. java.lang.UnsatisfiedLinkError при попытке загрузить OpenCV
- 25. С ++ эквивалент OpenCV cvConvertImage
- 26. Управление каналами в Portaudio
- 27. разница между глубиной изображения и каналами
- 28. Управление RSS-каналами
- 29. Ошибка OpenCV: «Невозможно загрузить изображение!»
- 30. соединение с именованными каналами с IP-адресом
@karlphilip: это больше не так. Возможно, удалите/отредактируйте ответ. См. Здесь: https://stackoverflow.com/questions/23562207/image-change-the-shape-when-displaying#23562497 –