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

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


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

编程思想和注意事项

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

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

绘制矩形框程序

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

  1. function [ dest ] = drawRect( src, pt, wSize, lineSize, color )
  2. %简介:
  3. % %将图像画上有颜色的框图,如果输入是灰度图,先转换为彩色图像,再画框图
  4. % 图像矩阵
  5. % 行向量方向 y
  6. % 列向量方向 x
  7. %----------------------------------------------------------------------
  8. %输入:
  9. % src 原始图像,可以为灰度图,可为彩色图
  10. % pt 左上角坐标 [x1, y1]
  11. % wSize 框的大小 [wx, wy]
  12. % lineSize 线的宽度
  13. % color 线的颜色 [r, g, b]
  14. %----------------------------------------------------------------------
  15. %输出:
  16. % dest 画好了的图像
  17. %----------------------------------------------------------------------
  18. %flag=1: 有缺口的框
  19. %flag=2: 无缺口的框
  20. flag = 1;
  21. %判断输入参数个数
  22. if nargin < 5
  23. color = [255 255 0];
  24. end
  25. if nargin < 4
  26. lineSize = 1;
  27. end
  28. if nargin < 3
  29. disp('输入参数不够 !!!');
  30. return;
  31. end
  32. %判断框的边界问题
  33. [yA, xA, z] = size(src);
  34. x1 = pt(1);
  35. y1 = pt(2);
  36. wx = wSize(1);
  37. wy = wSize(2);
  38. if x1>xA || ...
  39. y1>yA||...
  40. (x1+wx)>xA||...
  41. (y1+wy)>yA
  42. disp('画的框将超过图像 !!!');
  43. return;
  44. end
  45. %如果是单通道的灰度图,转成3通道的图像
  46. if 1==z
  47. dest(:, : ,1) = src;
  48. dest(:, : ,2) = src;
  49. dest(:, : ,3) = src;
  50. else
  51. dest = src;
  52. end
  53. %开始画框图
  54. for c = 1 : 3 %3个通道,rgb分别画
  55. for dl = 1 : lineSize %线的宽度,线条是向外面扩展的
  56. d = dl - 1;
  57. if 1==flag %有缺口的框
  58. dest( y1-d , x1:(x1+wx) , c ) = color(c); %上方线条
  59. dest( y1+wy+d , x1:(x1+wx) , c ) = color(c); %下方线条
  60. dest( y1:(y1+wy) , x1-d , c ) = color(c); %左方线条
  61. dest( y1:(y1+wy) , x1+wx+d , c ) = color(c); %左方线条
  62. elseif 2==flag %无缺口的框
  63. dest( y1-d , (x1-d):(x1+wx+d) , c ) = color(c); %上方线条
  64. dest( y1+wy+d , (x1-d):(x1+wx+d) , c ) = color(c); %下方线条
  65. dest( (y1-d):(y1+wy+d) , x1-d , c ) = color(c); %左方线条
  66. dest( (y1-d):(y1+wy+d) , x1+wx+d , c ) = color(c); %左方线条
  67. end
  68. end
  69. end %主循环尾
  70. end %函数尾
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86

调用主程序

调用drawRect.m 里的drawRect 函数。

  1. clc;
  2. clear;
  3. close all;
  4. %-----------------------------------
  5. %给图像加一个矩形框
  6. %-----------------------------------
  7. [filename, pathname] = uigetfile({'*.jpg'; '*.bmp'; '*.gif'; '*.png' }, '选择图片');
  8. %没有图像
  9. if filename == 0
  10. return;
  11. end
  12. data = imread([pathname, filename]);
  13. [m, n, z] = size(data);
  14. pt = [185, 273];
  15. wSize = [60,60];
  16. des = drawRect(data,pt,wSize,5 );
  17. subplot(1,2,1)
  18. imshow(data)
  19. subplot(1,2,2)
  20. imshow(des)
  21. return;
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25

处理结果

边框样式1

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

边框样式2

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

 
 from: http://blog.csdn.net/humanking7/article/details/46819527

[图像]用Matlab在图像上画矩形框的更多相关文章

  1. python+opencv选出视频中一帧再利用鼠标回调实现图像上画矩形框

    最近因为要实现模板匹配,需要在视频中选中一个目标,然后框出(即作为模板),对其利用模板匹配的方法进行检测.于是需要首先选出视频中的一帧,但是在利用摄像头读视频的过程中我唯一能想到的方法就是: 1.在视 ...

  2. matlab在图像中画长方形(框)

    function [state,result]=draw_rect(data,pointAll,windSize,showOrNot) % 函数调用:[state,result]=draw_rect( ...

  3. matlab 对图像操作的函数概览

    转自博客:http://blog.163.com/fei_lai_feng/blog/static/9289962200991713415422/ 一. 读写图像文件 1. imread imread ...

  4. C++调用Matlab引擎 图像读写与处理 (知识+代码篇)

    准备知识 之 Matlab Engine 执行命令 /* Execute matlab statement */ int engEvalString(Engine* ep, const char* s ...

  5. DAY13 Matlab实现图像错切源代码

    Matlab实现图像错切源代码 %错切im=(imread('robot.jpg'));im1=rgb2gray(im);figure,imshow(im1);[row,col]=size(im1); ...

  6. 非刚性图像配准 matlab简单示例 demons算法

    2011-05-25 17:21 非刚性图像配准 matlab简单示例 demons算法, % Clean clc; clear all; close all; % Compile the mex f ...

  7. 【matlab】图像直方图

    使用imhist函数(要先用rgb2gray转化为灰度图像) 利用matlab计算图像直方图函数为imhist() 具体用法: imhist( i );直接显示图像i的灰度直方图: imhist(i, ...

  8. MATLAB中图像的基本操作

    MATLAB中图像的基本操作 1.读取.显示图片 MATLAB中提供了immread()与imshow()函数读取和显示图片.其中读取函数imread()原型: imread: A = imread( ...

  9. matlab 提取图像轮廓(图像边缘提取)

    利用edge()函数提取图像轮廓,绘制出对象的边界和提取边界坐标信息,matlab实现代码如下: close all;clear all;clc; % 提取图像轮廓,提取图像边缘 I = imread ...

随机推荐

  1. scrollview 滚动布局

    <ScrollView xmlns:android="http://schemas.android.com/apk/res/android"    android:layou ...

  2. [VBA]批量替换PPT里的字体颜色

    不知道为什么计组老师的大量课件字体是伤害视力的亮蓝色……看久了眼睛疼,想把颜色替换成保护视力一点的灰色,但是找了N久也没找到在图形界面上直接操作的方法,于是在MSDN上晃了晃,Google了一下,写了 ...

  3. python lxml教程

    目前有很多xml,html文档的parser,如标准库的xml.etree , beautifulsoup  ,  还有lxml. 都用下来感觉lxml不错,速度也还行,就他了. 围绕三个问题: 问题 ...

  4. ELK系列--问题汇总(二)

    1.Kibana4 dashboard无法保存拖动的visualization位置 原因: 程序bug,json部分未能及时保存拖动的情况 解决方法: 手动在设置中,手动编辑dashboard的jso ...

  5. Hibernate (开源对象关系映射框架)

    一.基本介绍1.它对JDBC进行了非常轻量级的对象封装,它将POJO与数据库表建立映射关系,是一个全自动的orm(对象关系映射)框架,hibernate可以自动生成SQL语句,自动执行: Hibern ...

  6. ZOJ 3955 Saddle Point

    排序. 枚举每一个格子,计算这个格子在多少矩阵中是鞍点,只要计算这一行有多少数字比他大,这一列有多少数字比他小,方案数乘一下就是这个格子对答案做出的贡献. #include<bits/stdc+ ...

  7. 实验吧 recursive write up

    这是一个python写的文件 推测是用Freeze打包 所以必有一个Py_FrozenMain函数 分析函数有两个变量PYTHONINSPECT”和“PYTHONUNBUFFERED”之后都会调用ge ...

  8. 关于 Unity 的一些小细节,不注意可能会被“坑”一些时间。

    关于 Unity 的一些小细节,不注意可能会被"坑"一些时间. 最近因为一些"小"问题,总是需要找很久的原因,总结一下 UnityEngine.Input 在使 ...

  9. PIPESTATUS(bash) + pipefail(ksh)

    I have two processes foo and bar, connected with a pipe: $ foo | bar bar always exits 0; I'm interes ...

  10. 缩略图信息提取工具vinetto

    缩略图信息提取工具vinetto   在Windows操作系统中,为了方便用户快速浏览图片,系统会自动为每个图片生成预览图.预览图默认保存在同目录的Thumbs.db文件中.当图片文件删除后,Thum ...