2014-01-06 50 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'); 

當然,修復實際功能會更好,但現在已經夠用了。

希望這會有所幫助。