2017-02-06 1 views
1

私はボトルキャップをチェックする機能を持っています。検出されたキャップがない場合は、それをフォルダにイメージとして書き込みます。私の問題は、別のイメージを渡すと、古いものが新しいもので上書きされるということです.nocap0、jpg、new one 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

私は少し今のコードを変更しました。毎回私はそれが今、新しいものを書き込み、異なるイメージを与えるが、それはそうのような以前の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

ファイルが既に存在します。その後、ファイル名が見つからなくなるまでファイル名をテストすることができます。 'filename = sprintf( 'TESTINGFOLDERS/NOCAP/nocap%d.jpg'、i)'のように '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

関連する問題