2015-05-08 64 views
1

我正在研究face scrub dataset,它有很長的圖片網址列表。如何在使用imread URL時處理過期的URL鏈接?

我用一個for循環來獲取這些照片。但是,一些網址已經過期,所以我的matlab代碼返回錯誤'Unable to determine the file format.'但我認爲其實際原因是url鏈接沒有圖像了。例如,其中一個不良網址是: http://www.gossip.is/administrator/components/com_n-myndir/uploads/16de47418d69b1c2991731dffaca8a78.jpg

如何識別並忽略此錯誤,以便我的代碼可以繼續處理其餘列表?我可以用R代替,如果這樣可以更容易地解決這個問題。

+1

我不知道mathlab,但R有一些錯誤處理,這應該很容易實現。看一下R.中的'try'。如果你遇到困難,請發佈你試過的東西,人們會幫你修復它。 – lukeA

回答

4

您可以實現一個try/catch塊來捕獲(原始isnt'it)錯誤消息,並在鏈接確實斷開時跳過圖像。

當我們使用以下語法:

try 
    A = imread('http://www.gossip.is/cgi-sys/suspendedpage.cgi'); 

catch ME 

%// Just so we know what the identifier is. 
     ME 


end 

Matlab的第一個嘗試讀取URL所給出的圖像。如果它不能,我們要求它向catch發送錯誤消息(實際上是MException)並執行一些其他適當的操作。

事情是,我們需要知道什麼是確切的錯誤消息,以便在try/catch塊中識別它。

當我進入上面的代碼中,我得到了下面的結構ME

ME = 

    MException with properties: 

    identifier: 'MATLAB:imagesci:imread:fileFormat' 
     message: 'Unable to determine the file format.' 
     cause: {0x1 cell} 
     stack: [2x1 struct] 

因此,一旦我們知道確切的識別器生成的錯誤,我們可以使用strcmp尋找它在try/catch塊。例如用下面的代碼:

clear 
clc 


try 
    A = imread('http://www.gossip.is/cgi-sys/suspendedpage.cgi'); 
catch ME 
    if strcmp(ME.identifier,'MATLAB:imagesci:imread:fileFormat') 

     disp('Image link broken') 

    end 

    A = imread('peppers.png'); 
end 

imshow(A); 

Matlab的顯示「圖像鏈接破碎」和讀取peppers.png,如所預期。

希望有幫助!

+0

這正是我需要的。我學到了很多關於如何「調試」的知識。非常感謝! – user3768495

+0

那太棒了!我的榮幸 :) –