Image 处理相同图像后出现imread()权限错误

Image 处理相同图像后出现imread()权限错误,image,matlab,Image,Matlab,我有一个图像列表,其中包含我要批量处理的图像名称,下面是图像列表的格式: 1286996755-1286996763 1151149321-1151149325 1210402841-1209796794 ..... 我运行下面的matlab程序进行批处理,然而,当我运行第3500幅图像时,程序抛出 例外情况是: Can't open file "/home/XXX/XXX/XXX/XXX/SelectImage/1256955924-1256955926.jpg" for reading;

我有一个图像列表,其中包含我要批量处理的图像名称,下面是图像列表的格式:

1286996755-1286996763
1151149321-1151149325
1210402841-1209796794
.....
我运行下面的matlab程序进行批处理,然而,当我运行第3500幅图像时,程序抛出 例外情况是:

Can't open file "/home/XXX/XXX/XXX/XXX/SelectImage/1256955924-1256955926.jpg" for reading;
you may not have read permission.
在image_list.txt中有90000个图像名称,在该错误发生后,以下图像也将显示第35000到90000次 抛出相同的异常

不可思议的是,当我将原始列表中抛出该异常的第3000到90000个图像名设置为输入listimage_list.txt时, 该计划继续运行几乎3500图像成功后,所有失败

我不认为这是内存问题,因为monitorhtop表明运行的进程只需要使用一点内存。我不知道问题出在哪里

该方案:

function ss_demo

addpath(genpath('./SelectiveSearchCodeIJCV/'));
fid=fopen('./image_list.txt');
imnames=textscan(fid, '%s');
imnames=imnames{1};
outpath=fullfile(pwd, './output');
imgdir=fullfile(pwd, '../SelectImage/');

f_debug=fopen('debug.txt', 'w');

for i=1:numel(imnames)
    im_name=fullfile(imgdir, [imnames{i}, '.jpg']);
    % im_name=fullfile(imnames{i});
    try
        im=imread(im_name);
    catch err
        fprintf(f_debug, '%s\n', im_name);
        fprintf(2,'Error message:%s\n', err.message);
        fprintf('Error occur when %s\n', im_name);
        continue
    end
    boxes = selective_search_boxes(im);
    fprintf('processing %d: %s\n', i, imnames{i});
    filename=sprintf('%s/%s_box.txt', outpath, imnames{i});
    fid=fopen(filename, 'w');
    for k=1:size(boxes,1)
        fprintf(fid, '%d %d %d %d\n', boxes(k,1:4));
    end
end

上面的代码忘记在一个fopen之后写fclose。因此,由于打开的文件限制,程序将关闭。

可能是特定图像已损坏。你真的试过打开它看看你能不能看到一张图片吗?你有没有试着单独对该文件进行imread调用?你能在那个文件名上重现那个错误吗?在MATLAB之外打开图像,看看是否可以查看图像,怎么样?使用GIMP或其他照片查看器来确保。是的,我确定图像没有损坏,我可以查看它。此外,我使用抛出错误的图像作为下一次程序的输入,程序可以继续成功运行其中的3500个。错误在代码中的具体位置发生?imread调用?是的,imread函数抛出一个异常,表示无法打开文件“/home/XXX/XXX/XXX/XXX.jpg”进行读取;您可能没有读取权限。您在计算机的其他区域是否遇到随机错误?您是否注意到程序只是随机关闭?这听起来更像是RAM的问题。