我正在将驻留在文件夹中的.jpg文件加载到工作区,并在以后对它们执行一些操作 . 但是,在某些文件上,我收到有关Corrupt JPEG文件的警告 . 我不需要通过眼睛检查这些文件,但是,它们应该被排除在流程之外 . 因此,我需要能够以上述方式确定给定图像是否损坏 .
虽然imread抛出这样的警告,但它没有提供标志 . 我想使用一个类似于这种时尚的功能 .
这是示例代码
path=dir('*.jpg');
for i=1:length(dir)
image=imread(dir(i,1).name);
flag=iscorrupt(MException.last);
if (not(flag))
...
end
end
function out=iscorrupt(exception)
exception.message, out=isempty(strfind(exception.message,'corrupt'));
但是,这部分代码不能实现目的,因为它取决于最后一个异常 . 因此,在抛出腐败警告后,它将始终设置True标志 . 我想知道,如果有可能使用上述方法捕获所需的知识 .
2 回答
我已经达到了这一点 . 留在这里以供将来参考 .
我会将
imread
封装在try/catch
成语中 . 这样每次抛出异常时,您都可以继续循环,甚至无需从损坏的图像中读取数据 . 当你调用dir
以及访问每个文件的实际名称的方式时,也会有一些轻微的错别字 . 我会为你解决这个问题 .尝试这样的事情:
旁白:我不确定这是否有效,但是查看MATLAB文档,您可以通过
MException.last('reset');
重置最近未捕获的异常 . 如果你在循环的每次迭代中都这样做了,这还能解决你的问题吗?