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

imread() permission error after processing same images

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

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个图片名称,发生错误后,以下图片(第3500到第90000个)也 抛出相同的异常;

不可思议的是,当我将抛出异常的图像名称(原始列表中的第3000到第90000个)设置为输入列表时(image_list.txt), 该程序继续 运行 将近 3500 张图像成功,之后全部失败;

我不认为这是内存问题,因为 monitor(htop) 指出 运行ning 进程只占用了一点内存。我不知道问题出在哪里;

程序:

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。因此程序自打开文件限制后关闭。