概述
标注人头中心点位置,开发环境为Matlab,生成.mat文件格式,支持删除误标点,快捷按钮跳到下一张图片。
效果图
代码实现
对图片上某个点进行标注
clear all
close all
clc
set(gcf,'color','white')%图片的背景设置为白色
src='';
for i=1:240 %根据图片张数进行修改
num = i;
strshow=['the value of num=' num2str(num)];
disp(strshow);
str = '.jpg' ;
Mstr='.mat';
filestr='C:\Users\Alvin\Desktop\img10\';
refilestr='C:\Users\Alvin\Desktop\11-9\img\';
labelstr='C:\Users\Alvin\Desktop\11-9\label\';
left_par='air(';
Mark='mark';
right_par=')';
STR = sprintf('%s%d%s', filestr,num , str) ;
RSTR=sprintf('%s%d%s', refilestr,num , str) ;
MSTR=sprintf('%s%d%s', labelstr,num , Mstr) ;
% MarkSTR=sprintf('%s%d%s', refilestr,Mark,num , Mstr) ;
pic_source=imread(STR);
pic=imresize(pic_source,[544,960]);%调整图像的大小,
showpic=imshow(pic);
image_info = [0,0];%用于存储标记点
while(1)
[x1,y1]=ginput(1);
x1=fix(x1) ;
y1=fix(y1) ;
Atemp=[x1,y1];
image_info = [image_info;Atemp];
hold on
plot(x1,y1,'r+');
% Q键逐步撤销之前标注的点
if strcmpi(get(gcf,'CurrentCharacter'),'q')
if size(image_info,1)>0
image_info(size(image_info,1),:)=[];%非回车会以鼠标当前点做一次存储,这是多余的,删除
end
%重新做图
close all
showpic=imshow(pic);
if size(image_info,1) >0
image_info(size(image_info,1),:)=[];
for j = 1:size(image_info,1)
hold on
plot(image_info(j,1),image_info(j,2),'r+');
end
end
end
%回车键结束本次图片标定
if strcmpi(get(gcf,'CurrentCharacter'),char(13))
break;
end
end
image_info(1,:)=[];%删除第一行多余的0行
if isempty(image_info)
else
save(MSTR,'image_info');
imwrite(pic,RSTR);%实际修改本地的图片
end
close all
end