MATLAB提取图片点击处的坐标代码(仅供参考)

来源:互联网 发布:化验单制作软件 编辑:程序博客网 时间:2024/06/13 11:36

当初写这个小程序是为了提取图片点击处的坐标,每张照片自动循环进行标点,不用一张一张手动输入。我想提取手势图片的21个点的坐标。
x=dir(‘D:\MATLAB\work\rename1.m*.jpg’); %获取此目录下的图片
len=length(x);%计算图片的数量
fp=fopen(‘D:\MATLAB\work\Untitled3.m’,’w’);%以写的方式打开存放点坐标的文件
I=cell(1,len);%用cell存放照片
q=input(‘q=’);%此处是我个人意愿加上的一个东西,目的是接着上回的照片序号继续提取坐标,例如
%当我先标完了20张照片,我不想标了。下回开始标的时候,此时我输入q=20,那么接下来标的时候
%坐标前面的序号会紧跟着前面所标的。当第一次标的时候q=0就行了。
for i=1:len%开始循环
t=i+q;
ImageName=strcat(num2str(t),’.jpg’);%转换成字符串
I{t}=imread(ImageName);%读取照片
a=size(I{t});
m=a(1);
n=a(2);
if m<256|n<256%这个是为了防止照片过小,然后把照片放大
I{t}=imresize(I{t},[3*m,3*n]);
a=size(I{t});
m=a(1);
n=a(2);
end
fprintf(fp,’%5d.jpg(256*256): ‘,t);%先输出照片的序号
imshow(I{t});
for j=1:21%然后循环点击21个点,然后输出点击处的坐标
[x,y]=ginput(1);
hold on;
plot(x,y,’or’);
if x<0|x>n|y<0|y>m
fprintf(fp,’ -1, -1 ‘,x,y);%当所要点击的地方看不到,输出(-1,-1)
else
y1=(256*y)/m;%因为先在原图片点击的,如果需要控制照片大小,那么按比例变换坐标,这里
%我是需要在原照片上点击标尺准确度,然后换成照片为256*256格式的坐标,如果不需要,去掉
x1=(256*x)/n;
y=round(y1);
x=round(x1);
fprintf(fp,’%3.0d,%3.0d ‘,x,y);%输出最终坐标
end
hold off;
end
fprintf(fp,’\n’); %当取完一张照片,换行
end
fclose(fp);
%注:如果从网上找的一些照片,通常名字不一样,用这个小程序则需要将照片改成数字序列
%我也写了一个改名小程序,当然用软件改也行。建议这几个个小程序不要一起用。

%改名程序
x=dir(‘D:\MATLAB\work\HAND1.m*.jpg’); %原图放在HAND1.m文件夹中
len=length(x);
for a=1:len
x1=x(a).name;
x3=num2str(a);
x4=strcat(x3,’.jpg’);
copyfile([‘D:\MATLAB\work\HAND1.m\’ x1],[‘D:\MATLAB\work\rename1.m\’ x4]);%将修改过名字的图图片放在rename1.m中
end
fprintf(‘end’);

%检查并删除相同图片小程序,适用少量图片,图片太多时间太长
x=dir(‘D:\MATLAB\work\HAND1.m*.jpg’);
len=length(x);
for i=1:len
x=dir(‘D:\MATLAB\work\HAND1.m*.jpg’);
len=length(x);
im1=imread(x(i).name);
fprintf(‘%d ‘,i);
t=i+1;
for j=t:len
im2=imread(x(j).name);
if isequal(im1,im2)
delete(x(j).name);
end
end
end

小弟初涉代码界,望各位大哥批评指教。

0 0
原创粉丝点击