2014-01-31 5 views
2

Я использую приведенный ниже код для просмотра следующего изображения.PNG изображение не загружается должным образом в OpenCV

This

(Если вы не можете видеть изображение, щелкните правой кнопкой мыши над пространство и сохранить изображение ..) Изображение 32 бит. OpenCV показывает белое изображение. Это изображение с белой стрелкой с альфа-значением вокруг него.

Mat img = imread("FordwardIcon.png", CV_LOAD_IMAGE_UNCHANGED | CV_LOAD_IMAGE_ANYDEPTH); 
cout << img.depth() << "\t" << img.channels() << endl; 
imshow("img", img); 
waitKey(0); 

Пожалуйста, дайте мне знать, как не правильно загрузить изображение

+1

Я думаю, проблема в том, что изображение имеет 2 канала (1 оттенки серого и 1 альфа-канал). Создание изображения RGBA в gimp и чтение в opencv отлично работало для меня. Afaik OpenCV (или базовый кодек?!?) Ограничен в файлах PRI PRITING (только 3 канала), поэтому, возможно, чтение слишком ограничено. – Micka

+1

похоже, что imread не поддерживает 2-канальные изображения, как предлагает Мика. – baci

+0

@Canberk Baci Хорошо. У вас есть данные о том, как загрузить прикрепленное изображение в OpenCV. –

ответ

2

нет страха, изображение загружается правильно.

проблема в том, что вы ожидали imshow(), чтобы почтить альфа-канал (это не так).

+0

, но opencv говорит, channels = 1 и bitDepth = 8 Значения пикселей почти 255, когда я печатаю его cout << img ..., но исходное изображение 32 бит (просмотр деталей по свойствам окон). –

+0

О, все, что я мог судить до сих пор, был вашим кодом (который кажется правильным). почему бы не отредактировать и добавить свой образ, чтобы люди могли его попробовать? – berak

+0

Изображение уже прикреплено между первой строкой и второй строкой (но не видно). щелкните правой кнопкой мыши и сохраните изображение и проверьте его. это белое изображение с альфа-каналом –

2

В настоящее время Opencv (3.0), похоже, не может загружать изображения PNG с прозрачностью (иначе говоря, «альфа-канал»). Чтобы загрузить эти изображения с помощью cv::imread(), сначала необходимо удалить канал прозрачности и заменить его на некоторый цвет.

Это можно сделать легко с помощью Linux с помощью инструментов Imagemagick. Например:

convert input.png -background '#00ff00' -flatten result.png 

Вы можете проверить, если изображение имеет его (или нет) с file инструментом. На изображении вы предоставляете:

>$ file input.png 

дает:

input.png: PNG image data, 52 x 32, 8-bit gray+alpha, non-interlaced 

в то время как

>$ file result.png 

дает

result.png: PNG image data, 52 x 32, 8-bit colormap, non-interlaced 

См http://www.imagemagick.org/script/convert.php

Смежные вопросы