如何用Matlab给一张图圈出多个区域
最近在基本零基础搞深度学习的项目,第一个工作就是收集数据集。大致的工作是圈出几百张图片中的汽车,并给出它们的坐标,作为训练集。本来就是一个苦力活,再不借助工具,简直要忙死。在网上搜了一下,发现没有什么现成的可以在一张图里同时动态地辅助圈出多个区域的工具,决定自己做一个。
思路简单来说就是,通过句柄来画图。
function draw()
clear;
clc;
im = imread('E:\壁纸\gamersky_032origin_063_20151171713B6F.jpg');
imshow(im);
hold on;
global isClick;
isClick = false;
set(gcf, 'WindowButtonDownFcn', @MouseClickFcn); % 鼠标按下时,执行MouseClickFcn
set(gcf, 'WindowButtonUpFcn', @MouseUpFcn); % 鼠标松开时,执行MouseUpFcn
set(gcf, 'WindowButtonMotionFcn', @MouseMoveFcn); %鼠标移动时,执行MouseMoveFcn
endfunction MouseClickFcn(src, event)
pt = get(gca, 'CurrentPoint');
global x1 y1 isClick;
global isDraw;
isDraw = false;
isClick = true;
x1 = pt(1, 1);
y1 = pt(1, 2); % 鼠标按下时,记录初始坐标
endfunction MouseUpFcn(src, event)
global isClick;
isClick = false; % 鼠标松开时,表示当前标记结束
endfunction MouseMoveFcn(src, event)
global x1 y1 x2 y2 isClick;
global h1 h2 h3 h4;
global isDraw;
if isClick == truedelete(h1);delete(h2);delete(h3);delete(h4);pt = get(gca, 'CurrentPoint');x2 = pt(1, 1);y2 = pt(1, 2);if x1 < x2x = x1;elsex = x2;endif y1 < y2y = y1;elsey = y2;endh1 = plot([x1 x1], [y1 y2]);h2 = plot([x1 x2], [y1 y1]);h3 = plot([x2 x2], [y1 y2]);h4 = plot([x1 x2], [y2 y2]); % 鼠标按下并移动时,动态画矩形isDraw = false;
elseif isDraw == falseplot([x1 x1], [y1 y2]);plot([x1 x2], [y1 y1]);plot([x2 x2], [y1 y2]);plot([x1 x2], [y2 y2]);isDraw = true;end
end
end
也许有人问,为什么不直接取点下坐标和松开坐标画呢?这其实并非不可,甚至实现起来简单一大截,但这样的话,只有在最后画出来的时候,才能看到你所画的矩形,而在这之前,只有估计它大概是不是圈出了你所需的范围。所以,我最后决定动态标记,鼠标松开代表标记结束,而在这之前,程序会跟踪鼠标按下后每一刻的位置,不断地更新并显示图形。
如何用Matlab给一张图圈出多个区域相关推荐
- 数学建模中如何用 matlab画漂亮的图(一)
数学建模中如何用 matlab画漂亮的图(二维图形) 1 plot绘图命令*** 1.1 plot(x) 当x为实向量时,plot(x)绘制出的曲线,横坐标为该向量的下表,纵坐标为每一个下表位置所对应 ...
- 一张图分出你是用左脑还是右脑 z
一张图分出你是用左脑还是右脑. 如果你看见这个舞女是顺时针转,说明你用的是右脑: 如果是逆时针转,说明你用的左脑. 耶鲁大学耗时5年的研究成果,据说14%的美国人可以两个方向都能看见. 补充资料: 大 ...
- matlab在一张图上画两条折线图,excel2013怎么在一张曲线图上绘制多条曲线?
office软件每年的更新速度很快,虽然更新后的版本肯定能够实现更新前的功能,但是由于版式方面的改进,使得使用者初次使用时不是特别得心应手.下面重点讲述一下,如何利用excel2013在同一张图中做多 ...
- 用核显能跑matlab吗,5张图告诉你核显究竟能干嘛
小编今天翻看评论,有好几个小伙伴都在问显卡的事情.其实发现,很多人的需求并不是非要独显才能实现的.索性今天小编就说说核显究竟都能干什么,哪些小伙伴考虑集显就够用了. 现在核显越来越强大,从6代酷睿起, ...
- Matlab在一张图上画多条曲线或分别画
1.在plot曲线时,有时想在一张图上重合画多条曲线,我们只需要在画图命令之前加上hold on就好,比如: t = 1:0.1:10: y1 = sin(2*pi*t); y1 = cos(2*pi ...
- 如何用matlab画电场强度三维图,浅析matlab模拟静电场三维图与恒定电流场模拟静电场...
浅析matlab模拟静电场三维图与恒定电流场模拟静电场 1 浅析 Matlab 模拟静电场三维图 与恒定电流场模拟静电场 摘要:本文利用恒定电流场模拟静电场,通过寻找等势点的方法描绘出点 电荷对的电力 ...
- 程序员和注册会计师的地位_“注册会计师和律师哪个地位高?”这3张图给出了答案!...
随着注会备考季越来越火热,很多CPA考生又开始纠结起了一个老生常谈的话题"CPA和法考到底哪一个更难?为什么注册会计师的地位好像没有律师高?" 2020年CPA备考高效学习方法,必 ...
- 一张图分出你是左脑发达还是右脑发达(转)
如果你看见这个舞女是顺时针转,说明你用的是右脑: 如果是逆时针转,说明你用的左脑. 耶鲁大学耗时5年的研究成果. 据说,14%的美国人可以两个方向都能看见. 可以和别人一起看,测试下,一般不同人同时看 ...
- 一张图分出你是用左脑还是右脑!
如果你看见这个舞女是顺时针转,说明你用的是右脑: 如果是逆时针转,说明你用的左脑. 耶鲁大学耗时5年的研究成果,据说. 14%的美国人可以两个方向都能看见 ( 無汗不成 注: 这些 纯属胡 ...
最新文章
- 10分钟搭建你的第一个图像识别模型 | 附完整代码
- TypeError: 'range' object doesn't support item deletion《机器学习实战》改进的随机梯度上升算法
- android怎么长按一张图片保存到相册_instagram怎么保存图片?
- 不用回调方法捕获数据包
- jdk1.8新特性(四)——Optional
- 老司机给我们解读 Spring Boot 最流行的 16 条实践
- 熟悉 ASP.NET MVC 类
- Nagios 配置及监控
- linux get current thread count and system threads limit
- 格式要求_论著的格式要求
- (一)DSP28335
- 大工14秋计算机英语3,【大工作业】秋季《大学英语3》在线测试2包100
- java竖线_JAVA 竖线|转义字符 | | 学步园
- vim:修改vim录制的宏
- java中事务并发问题是_事务必会必知
- 正太分布函数和反函数 标量值函数 (借鉴)
- 01day入学测试总结
- tf.constant
- CTF训练 web安全SSI注入
- android使用wifi连接android手机