[图像]用Matlab在图像上画矩形框

原创 2015年07月09日 17:20:53

原创文章,欢迎转载。转载请注明:转载自 祥的博客

原文链接:http://blog.csdn.net/humanking7/article/details/46819527


在毕业设计的时候写论文画图,要在一个图像上精确的标记出要处理的区域,用Photoshop或是其他绘图软件难免不精确,而且也不符合懒人思维(以后怎么办,要一劳永逸,嘿嘿),所以就自己写软件吧。

编程思想和注意事项

其实程序的思路很简单,就是在局域外面像素的值(颜色)覆盖掉就行了,但是要注意几点内容。

  1. 原图像通道问题(边框颜色问题)。图像的是单通道的(黑白)还是多通道的(彩色),这点在于你要的框的颜色,我的方法是如果是单通道的图,现将其处理为多通道。
  2. 边界问题。边框是有宽度的,而且我的框是向外填充的,所以要考虑到图像的边界问题,如果超出去了就会报错(图像在Matlab中以数组的形式存在,超出范围了就越界了)
  3. 像素点位置。图像在Matlab中是以数组的形式存放的,在图像像素坐标系中,x方向用数组的列表示,y方向用数组的行表示。在取图像元素时候一定要注意。

绘制矩形框程序

保存为 drawRect.m 文件,这是一个函数文件。

function [ dest ] = drawRect( src, pt, wSize,  lineSize, color )
%简介:
% %将图像画上有颜色的框图,如果输入是灰度图,先转换为彩色图像,再画框图
% 图像矩阵
% 行向量方向  是  y
% 列向量方向  是  x
%----------------------------------------------------------------------
%输入:
% src:        原始图像,可以为灰度图,可为彩色图
% pt:         左上角坐标   [x1, y1]
% wSize:   框的大小      [wx, wy]
% lineSize: 线的宽度
% color:     线的颜色      [r,  g,  b] 
%----------------------------------------------------------------------
%输出:
% dest:           画好了的图像
%----------------------------------------------------------------------

%flag=1: 有缺口的框
%flag=2: 无缺口的框
flag = 1;


%判断输入参数个数
if nargin < 5
    color = [255 255 0];
end

if nargin < 4
    lineSize = 1;
end

if nargin < 3
    disp('输入参数不够 !!!');
    return;
end





%判断框的边界问题
[yA, xA, z] = size(src);
x1 = pt(1);
y1 = pt(2);
wx = wSize(1);
wy = wSize(2);
if  x1>xA || ...
        y1>yA||...
        (x1+wx)>xA||...
        (y1+wy)>yA

    disp('画的框将超过图像 !!!');
    return;
end

%如果是单通道的灰度图,转成3通道的图像
if 1==z
    dest(:, : ,1) = src;
    dest(:, : ,2) = src;
    dest(:, : ,3) = src;
else
    dest = src;
end

%开始画框图
for c = 1 : 3                 %3个通道,r,g,b分别画
    for dl = 1 : lineSize   %线的宽度,线条是向外面扩展的
        d = dl - 1;
        if  1==flag %有缺口的框
            dest(  y1-d ,            x1:(x1+wx) ,  c  ) =  color(c); %上方线条
            dest(  y1+wy+d ,     x1:(x1+wx) , c  ) =  color(c); %下方线条
            dest(  y1:(y1+wy) ,   x1-d ,           c  ) =  color(c); %左方线条
            dest(  y1:(y1+wy) ,   x1+wx+d ,    c  ) =  color(c); %左方线条
        elseif 2==flag %无缺口的框
            dest(  y1-d ,            (x1-d):(x1+wx+d) ,  c  ) =  color(c); %上方线条
            dest(  y1+wy+d ,    (x1-d):(x1+wx+d) ,  c  ) =  color(c); %下方线条
            dest(  (y1-d):(y1+wy+d) ,   x1-d ,           c  ) =  color(c); %左方线条
            dest(  (y1-d):(y1+wy+d) ,   x1+wx+d ,    c  ) =  color(c); %左方线条
        end
    end    
end %主循环尾


end %函数尾

调用主程序

调用drawRect.m 里的drawRect 函数。

clc;
clear;
close all;
%-----------------------------------
%给图像加一个矩形框
%-----------------------------------

[filename, pathname] = uigetfile({'*.jpg'; '*.bmp'; '*.gif'; '*.png' }, '选择图片');
%没有图像
if filename == 0
    return;
end

data = imread([pathname, filename]);
[m, n, z] = size(data);

pt = [185, 273];
wSize = [60,60];

des = drawRect(data,pt,wSize,5 );
subplot(1,2,1)
    imshow(data)
subplot(1,2,2)
    imshow(des)
return;

处理结果

边框样式1

有缺口的边框样式,在drawRect.m 文件中flag = 1

1

边框样式2

无缺口的边框样式,在drawRect.m 文件中flag = 2

2

版权声明:本文为博主原创文章,未经博主允许不得转载。

matlab代码-图像上画框

matlab进行图像处理之后,很多时候需要在图像上画出矩形框;如,调用matlab的某个检测函数,得到结果之后,往往需要将检测结果的矩形框画在图像上,直观、方便的进行查看;下面的代码就是这个目的: ...
  • carson2005
  • carson2005
  • 2013年12月11日 14:29
  • 10692

使用matlab在图片上画框,并保存

clear all close all clc for k=16  p=k; q=int2str(p); path='E:\CellDetection\'; path1='E:\just_draw\'...
  • qq_31975211
  • qq_31975211
  • 2017年12月08日 20:13
  • 113

MATLAB GUI 打开一幅图像 在图像上画多边形和矩形

  • 2012年08月30日 16:18
  • 116KB
  • 下载

Matlab----大图中画子图的方法

clc close all t=0:.1:2*pi; plot(t,sin(t),'k'); axes('position',[0.55,0.55,0.3,0.3]);%关键在这句!所画的小图 p...
  • yf210yf
  • yf210yf
  • 2016年04月22日 07:01
  • 3259

matlab 在照片中画矩形框

initstate = [x y w h]; %-----------------------------------------Show the tracking result im...
  • SMF0504
  • SMF0504
  • 2016年06月28日 21:39
  • 1965

matlab-手动画矩形框和显示矩形框及文本

在标定数据时,需要手工标记矩形框,并获取位置信息 1.手工标记          imshow(img);          h = imrect;          pos = wait(h...
  • Miss_ear
  • Miss_ear
  • 2016年07月29日 20:29
  • 712

matlab绘制矩形和线

  • 2014年10月16日 09:53
  • 2KB
  • 下载

matlab中在图像上划线 画圈的方法

其实用plot都可以搞定。  plot(imp(:,1),imp(:,2),'ro'); %最后的‘ro’,r是代表红色,o是代表画圈。画圈的话可以提供多个点的坐标,我这里用的就是向量的形式。  ...
  • Layumi1993
  • Layumi1993
  • 2016年08月03日 12:53
  • 6540

Matlab绘图-很详细,很全面

Matlab绘图强大的绘图功能是Matlab的特点之一,Matlab提供了一系列的绘图函数,用户不需要过多的考虑绘图的细节,只需要给出一些基本参数就能得到所需图形,这类函数称为高层绘图函数。此外,Ma...
  • wangcj625
  • wangcj625
  • 2011年03月30日 09:31
  • 754222

Matlab在图像中画标记框

Matlab在图像中画标记框 Matlab在图像中画标记框 img = imread('M1.JPG'); figure; hold on; imshow(im...
  • adong76
  • adong76
  • 2015年03月05日 14:54
  • 1365
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:[图像]用Matlab在图像上画矩形框
举报原因:
原因补充:

(最多只允许输入30个字)