2014-01-06 47 views
1

我试过用Google搜索它,似乎没有其他人有这种错误。imread()在Octave上停止工作

我在Ubuntu 12.04上使用Octave 3.6.1。我一直在使用imread()funcion读了一段时间的图像,但就在昨天就开始抛出这个错误:

octave:5> I = imread('example.jpg'); 
error: imread: invalid image file: Magick++ exception: Magick: Unable to open file (tures/example.jpg) reported by coders/jpeg.c:955 (ReadJPEGImage) 
error: called from: 
error: /usr/share/octave/3.6.1/m/image/imread.m at line 74, column 7 

如果我试图读取PNG,我收到了类似的错误:

octave:5> I = imread('example.png'); 
error: imread: invalid image file: Magick++ exception: Magick: Unable to open file (tures/example.png) reported by coders/png.c:2790 (ReadPNGImage) 
error: called from: 
error: /usr/share/octave/3.6.1/m/image/imread.m at line 74, column 7 

有人知道发生了什么吗?如何解决这个问题?

非常感谢!

+0

你试过重新安装你使用的图像处理软件包还是八度?安装了一些东西后,这个错误是否开始出现? – Dan

+1

我试图重新安装一切,问题依然存在。我相信它可能是在Ubuntu的每日更新之后开始的...... – flaviomax

+0

而且是example.jpg等肯定在正确的文件夹中?你的脚本的路径和图像的路径是什么? – Dan

回答

1

Octave使用GraphicsMagick(或ImageMagick)来处理图像的读写。 GraphicsMagick不直接处理图像的读写,它是单个API下多种格式库的封装。

当您构建GraphicsMagick时,它会检查您的系统是否有可用的库,并禁用/激活格式,因为这些是呈现的格式。你可能自己建立了GraphicsMagick而没有开发库libpng和libjpeg。在Ubuntu中,我相信那些包在libpng12-devlibjpeg8-dev。请使用系统随附的GraphicsMagick库,或者如果您需要自己构建它,请参阅Octave wiki中的说明。

要确认这确实是您的问题,请运行gm -version并检查是否激活了这些格式。举例来说,在我的系统的输出显示:

Feature Support: 
    Thread Safe    yes 
    Large Files (> 32 bit) yes 
    Large Memory (> 32 bit) no 
    BZIP      yes 
    DPS      no 
    FlashPix     no 
    FreeType     yes 
    Ghostscript (Library) no 
    JBIG      yes 
    JPEG-2000    yes 
    JPEG      yes 
    Little CMS    yes 
    Loadable Modules   no 
    OpenMP     yes (201107) 
    PNG      yes 
    TIFF      yes 
    TRIO      no 
    UMEM      no 
    WMF      yes 
    X11      yes 
    XML      yes 
    ZLIB      yes 
+1

当我运行'gm -version'时,似乎没有什么不对; png和jpeg格式都标记为支持。 我尝试重新安装Octave,GraphicsMagick,像我一样自己构建它,并且问题依然存在。 – flaviomax

+0

@ user3166406仔细检查您的系统中是否没有多个GraphicsMagick。或者你有不止一个版本的Octave,并且你仍然在运行之前的Octave版本(与坏的GraphicsMagick链接的版本)。 – carandraug

1

我有同样的问题3.6.4Windows 8.1,对我来说,简单的解决方法是这样的:

IMAGE_PATH = ('C:\Users\...'); 

在图像存储

Image = file_in_path(IMAGE_PATH, 'image.jpg'); 

当然,修复实际功能会更好,但现在已经够用了。

希望这会有所帮助。