概述
标注人头中心点位置,开发环境为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

本文介绍了一个使用Matlab开发的图像标注工具,该工具能够帮助用户在图片上精确地标记人头中心点,并提供了错误标注点的删除功能,以及通过快捷按钮跳转至下一张图片的便利性。代码中详细展示了如何读取、显示图片,收集标注点并保存为.mat文件,同时实现了撤销操作和图片保存功能。
675

被折叠的 条评论
为什么被折叠?



