2014-10-28 4 views
0

У меня возникла проблема, когда я хочу прочитать изображение с помощью функции OpenCV imread(). Изображение ОК, и я могу показать его в программном обеспечении для отображения изображений. Но когда я использую imdecode() для получения данных изображения, данные возвращают NULL. Я буду загружать изображения и код, и надеюсь, что кто-нибудь может помочь мнес использованием imread OpenCV не удалось, когда изображение ОК

Mat img = imread(image_name); 
if(!img.data) return -1; 

ссылка на изображение находится здесь: http://img3.douban.com/view/photo/raw/public/p2198361185.jpg

PS: image_name все в порядке. Я думаю, OpenCV не может декодировать это изображение. Итак, есть ли способ декодирования этого изображения с помощью OpenCV ?, например, добавить новую библиотеку декодирования. Кстати, я могу прочитать это изображение, используя другую библиотеку изображений, такую ​​как freeImage.

+1

Путь к изображению может быть неправильным, т. Е. 'Image_name'. – bikz05

+0

image_name все в порядке, вы можете проверить его на своем компьютере Я думаю, что это проблема изображения, и opencv не может декодировать это изображение. Так что я могу сделать, чтобы opencv разрешил декодировать это изображение. –

+0

Не удается получить изображение .. 403 ошибка. Ну, можете ли вы указать точный контент в image_name. –

ответ

0

Ваше изображение находится в .gif и на данный момент оно не поддерживается OpenCV.

Примечание OpenCV предлагает поддержку форматов изображения Windows Bitmap (BMP), портативные форматы изображений (PBM, PGM, частей на миллион) и ВС растра (ср, РАС). С помощью помощи плагинов (вам нужно указать их использование, если вы создаете библиотеку, тем не менее, в пакетах, которые мы отправляем по умолчанию) вы также можете загружать форматы изображений, такие как JPEG (jpeg, jpg, jpe), JPEG 2000 (jp2 - кодовое имя в CMake as Jasper), файлы TIFF (tiff, tif) и портативная сетевая графика (png). Кроме того, OpenEXR также является возможностью .

Источник - Нажмите here

Вы можете использовать что-то вроде this, чтобы выполнить преобразование.

Я смог загрузить ваше изображение, используя imread, используя это. Кроме того, вы можете посмотреть FreeImage.

-2

Существует два способа чтения изображения в OpenCV, один использует Mat другой, используя IplImage. Я вижу, вы использовали бывшую. Вы можете попробовать второй аргумент imread также:

image = imread("image.jpg", CV_LOAD_IMAGE_COLOR); // Read the file 

еще использовать IplImage

#include "opencv2/highgui/highgui.hpp" 
#include "opencv2/imgproc/imgproc_c.h" 
#include <opencv2/core/core.hpp> 

IplImage* src = 0; 

if((src = cvLoadImage("filename.jpg",1)) == 0) 
{ 
    printf("Cannot load file image %s\n", filename); 
} 

Если они не работают, пожалуйста, проверьте, если вы установили libjpeg, LibTIFF и других зависимостей для считывания изображения в OpenCV.

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

+1

, пожалуйста, не советуйте людям здесь использовать устаревший c-api. это больше не вариант с 2010 года. – berak