1

私は、写真の URL の長いリストを持つフェイス スクラブ データセットに取り組んでいます。

これらの写真を取得するために for ループを使用しました。ただし、一部の URL の有効期限が切れているため、私の matlab コードはエラーを返し'Unable to determine the file format.'ますが、実際の理由は、URL リンクに画像がもうないことだと思います。たとえば、悪い URL の 1 つは次のとおりです

このエラーを特定して無視し、コードがリストの残りの部分で引き続き機能するようにするにはどうすればよいですか? この問題を簡単に解決できる場合は、代わりに R を使用できます。

4

1 に答える 1

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]

したがって、エラーを生成する正確な識別子がわかれば、ブロック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 は、期待どおりに 'Image link壊れた' を表示し、読み取りますpeppers.png

それが役立つことを願っています!

于 2015-05-08T20:03:15.703 に答える