使用imread URL时如何处理过期的URL链接?

时间:2015-05-08 19:45:54

标签: matlab url imread

我正在研究face scrub dataset,其中包含很多图片网址。

我用for循环来获取这些照片。但是,有些网址已过期,因此我的matlab代码返回错误'Unable to determine the file format.'但是我认为实际的原因是网址链接不再有图像了。例如,其中一个不良网址是: http://www.gossip.is/administrator/components/com_n-myndir/uploads/16de47418d69b1c2991731dffaca8a78.jpg

如何识别并忽略此错误,以便我的代码可以继续处理列表的其余部分?如果能够更轻松地解决这个问题,我可以使用R代替。

1 个答案:

答案 0 :(得分:4)

您可以实现try/catch块来捕获(原始的不是它)错误消息,如果链接确实已损坏,则跳过图像。

当我们使用以下语法时:

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]

因此,一旦我们知道产生错误的确切标识符,我们就可以使用strcmptry/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

希望有所帮助!