2017-02-06 5 views
1

У меня есть функция, которая проверяет крышку бутылки. Если флажок не обнаружен, он записывает его как изображение в папку. Моя проблема заключается в том, что если я передаю другое изображение, старый получает переопределенный новый, есть ли способ сделать новое изображение вместо перезаписывания старого, такого как nocap0, jpg, а затем новый nocap1.jpg и т. Д.?matlab imwrite новое изображение вместо того, чтобы переопределять его

Код:

function [ ] = CHECK_FOR_CAP(image) 

%crop loaction of cap 
imageCROP = imcrop(image,[130 0 100 50]); 
%turn to BW 
imageBW=im2bw(imageCROP); 
%count black pixels 
answer = sum(sum(imageBW==0)); 
%if <250 black, save it to folder NOCAP 
if answer<250 
    imwrite(image, 'TESTINGFOLDERS/NOCAP/nocap.jpg', 'jpg'); 
    disp('NO CAP DETECTED'); 
end 

UPDATE

Я изменил код немного в настоящее время. Everytime я даю другое изображение теперь пишет новый, но он переписывает предыдущий Aswell, как так: http://imgur.com/a/KIuvg

Мой новый код:

function [ ] = CHECK_FOR_CAP(image) 

folder = 'TESTINGFOLDERS/NOCAP'; 
filePattern = fullfile(folder, '/*.*'); 
ImageFiles = dir(filePattern); 
%crop loaction of cap 
imageCROP = imcrop(image,[130 0 100 50]); 
%turn to BW 
imageBW=im2bw(imageCROP); 
%count black pixels 
answer = sum(sum(imageBW==0)); 
%if <250 black, save it to folder NOCAP 
if answer<250 
    a = length(ImageFiles)-1; 
    for j = 1:a 
     baseFileName = [num2str(j),'.jpg']; 
     filename = fullfile(folder,baseFileName); 
     if exist(filename,'file') 
      imwrite(image,filename); 
     end 
     imwrite(image, fullfile(filename)); 
    end 
    disp('NO CAP DETECTED'); 
end 
+1

Вы можете использовать 'существует (имя файла,«файл»)', чтобы проверить, является ли файл уже существует. Затем вы можете проверить имена файлов, пока не найдете тот, который не был взят. Как цикл через 'i' для' filename = sprintf ('TESTINGFOLDERS/NOCAP/nocap% d.jpg', i) '. – Florian

+0

Привет, Флориан, спасибо за ответ, я отредактировал код, но все еще не работает правильно. Что я там делаю неправильно? – Powisss

+0

Слишком долго, чтобы добавить комментарий, я отправил ответ. – Florian

ответ

2

Вы пишете

for j = 1:a 
    baseFileName = [num2str(j),'.jpg']; 
    filename = fullfile(folder,baseFileName); 
    if exist(filename,'file') 
     imwrite(image,filename); 
    end 
    imwrite(image, fullfile(filename)); 
end 

Это означает, что всякий раз, когда вы находите файл, вы его перезаписываете. Затем вы перезаписываете его снова. Вы делаете это для как можно большего количества файлов (a исходит из некоторых данных, которые вы делаете в своей папке). То, что вам нужно, это наоборот: найдите тот, который не существует. Что-то вроде этого:

j = 0; 
while true 
    j = j + 1; 
    baseFileName = [num2str(j),'.jpg']; 
    filename = fullfile(folder,baseFileName); 
    if ~exist(filename,'file') 
     break 
    end 
end 
imwrite(image, fullfile(filename)); 

Это может быть дополнительно сокращен (например, с помощью цикла while exist(...)), но он передает идею ...

+0

Работала красиво, спасибо за объяснение так просто :)! – Powisss

+0

Добро пожаловать. :) – Florian

Смежные вопросы