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

    xiaoxiao2021-03-26  28

    当初写这个小程序是为了提取图片点击处的坐标,每张照片自动循环进行标点,不用一张一张手动输入。我想提取手势图片的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,’].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

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

    转载请注明原文地址: https://ju.6miu.com/read-658405.html

    最新回复(0)