加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

如何用Matlab给一张图圈出多个区域(转载)

(2017-03-17 14:28:19)
标签:

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
end

function 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);  % 鼠标按下时,记录初始坐标
end

function MouseUpFcn(src, event)
global isClick;
isClick = false;  % 鼠标松开时,表示当前标记结束
end

function MouseMoveFcn(src, event)global isClick;
isClick = false;  % 鼠标松开时,表示当前标记结束
end

function MouseMoveFcn(src, event)
global x1 y1 x2 y2 isClick;
global h1 h2 h3 h4;
global isDraw;
if isClick == true
    delete(h1);
    delete(h2);
    delete(h3);
    delete(h4);
    pt = get(gca, 'CurrentPoint');
    x2 = pt(1, 1);
    y2 = pt(1, 2);
    if x1 < x2
        x = x1;
    else
        x = x2;
    end
    if y1 < y2
        y = y1;
    else
        y = y2;
    end
    h1 = 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;
else
    if isDraw == false
        plot([x1 x1], [y1 y2]);
        plot([x1 x2], [y1 y1]);
        plot([x2 x2], [y1 y2]);
        plot([x1 x2], [y2 y2]);
        isDraw = true;
    end
end
end也许有人问,为什么不直接取点下坐标和松开坐标画呢?这其实并非不可,甚至实现起来简单一大截,但这样的话,只有在最后画出来的时候,才能看到你所画的矩形,而在这之前,只有估计它大概是不是圈出了你所需的范围。所以,我最后决定动态标记,鼠标松开代表标记结束,而在这之前,程序会跟踪鼠标按下后每一刻的位置,不断地更新并显示图形。


综述:其实就是类似于C++中对鼠标或其他硬件的消息进行响应的过程!http://www/uc/myshow/blog/misc/gif/E___6717EN00SIGG.gif

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有