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

时间:2015-01-12 03:50:26

标签: 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;
you may not have read permission.

image_list.txt中有90000个图像名称,在发生错误后,以下图像(第3500到第90000个)也是 抛出相同的异常;

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

我不认为这是内存问题,因为监视器(htop)表明正在运行的进程只需占用一点内存。我不知道问题是什么;

该计划:

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

1 个答案:

答案 0 :(得分:0)

上面的代码忘了在fclose后写fopen。因此程序因打开文件限制而关闭。