我有一个图像列表,其中包含我要批处理的图像名称,下面是图像列表的格式:
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
答案 0 :(得分:0)
上面的代码忘了在fclose
后写fopen
。因此程序因打开文件限制而关闭。