处理相同图像后 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
。因此程序自打开文件限制后关闭。
我有一个图像列表,其中包含我要批处理的图像名称,下面是图像列表的格式:
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
。因此程序自打开文件限制后关闭。