每当我按下按钮时,我都希望保存图像而不会覆盖它们。你可以帮我看看如何在不覆盖原件的情况下保存图像吗?我想要做的是每当我按下按钮时,它会一次生成1张图像而不删除原件。
就像在数码相机中一样,每当我点击触发按钮时,它将保存1张图像,文件名将为 image1.jpg 。所以基本上,如果我再次按下触发器,它将再次捕获1个图像,文件名将为 image2.jpg ,依此类推。
这是我的代码:
counter = 1; %initialize filename increment
vid = videoinput('winvideo',2);
set(vid, 'ReturnedColorSpace', 'RGB');
img = getsnapshot(vid);
imshow(img);
savename = strcat('C:\Users\Sony Vaio\Documents\Task\images\image_' ,num2str(counter), '.jpg'); %this is where and what your image will be saved
imwrite(img, savename);
counter = counter +1; %counter should increment each time you push the button
我的代码保存并继续覆盖文件名image1.jpg。 为了清楚起见
按1按钮,保存1张图像。
就像它会按下按钮时调用整个块代码一样。 我希望你们能帮助我。我现在真的很烦恼:( 谢谢:))
答案 0 :(得分:2)
如果这是构成该按钮的回调函数的代码,那么确实,它会在每次推送时执行整个块。
如果是这种情况,您需要将其更改为:
%// initialize filename increment
persistent counter;
if isempty(counter)
counter = 1; end
vid = videoinput('winvideo', 2);
set(vid, 'ReturnedColorSpace', 'RGB');
img = getsnapshot(vid);
imshow(img);
%// this is where and what your image will be saved
savename = [...
'C:\Users\Sony Vaio\Documents\Task\images\image_', ...
num2str(counter), '.jpg'];
imwrite(img, savename);
%// counter should increment each time you push the button
counter = counter + 1;
或者,您可以检查实际存在的文件,并使用序列中的下一个逻辑文件名:
vid = videoinput('winvideo', 2);
set(vid, 'ReturnedColorSpace', 'RGB');
img = getsnapshot(vid);
imshow(img);
%// this is where and what your image will be saved
counter = 1;
baseDir = 'C:\Users\Sony Vaio\Documents\Task\images\';
baseName = 'image_';
newName = [baseDir baseName num2str(counter) '.jpg'];
while exist(newName,'file')
counter = counter + 1;
newName = [baseDir baseName num2str(counter) '.jpg'];
end
imwrite(img, newName);
答案 1 :(得分:0)
每次按下该按钮时,由于第一个语句,计数器值将重置为1:
counter = 1
因而错误。
counter = length(dir('*.jpg')) + 1; %Counts the number of .jpg files in the directory
那应该做的。
答案 2 :(得分:0)
查希尔: 我是在线程序,关于图像处理和图像采集从相机写作MATLAB。 每隔几秒钟收到图像,我会得到一张相机的照片。 必须在统计过程控制图表中存储和处理照片。 当图像采集程序后的第一张图像挂起并停止时。 请编码从相机在线每隔10秒获取图像,发送可用于统计过程控制的图像。 感谢