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

[plain]  view plain  copy
  1. function [state,result]=draw_rect(data,pointAll,windSize,showOrNot)  
  2. % 函数调用:[state,result]=draw_rect(data,pointAll,windSize,showOrNot)  
  3. % 函数功能:在图像画个长方形框  
  4. % 函数输入:data为原始的大图,可为灰度图,可为彩色图  
  5. %          pointAll 框的左上角在大图中的坐标(每行代表一个坐标),  
  6. %                   注意:在图中的坐标系为第一列为y,第二列为x(很奇怪的)  
  7. %          windSize 框的大小 windSize=[112,92] 分别表示长宽  
  8. %          showOrNot 是否要显示,默认为显示出来  
  9. % 函数输出:state -- 表示程序结果状态  
  10. %          result - 结果图像数据   
  11. % 函数历史: v0.0 @2013-01-27 created by Aborn  
  12.   
  13. if nargin < 4  
  14.     showOrNot = 1;  
  15. end  
  16.   
  17. rgb = [255 255 0];                                 % 边框颜色  
  18. lineSize = 3;                                      % 边框大小,取1,2,3  
  19.   
  20. windSize(1,1)=windSize(1,1);  
  21. windSize(1,2) = windSize(1,2);  
  22. if windSize(1,1) > size(data,1) ||...  
  23.         windSize(1,2) > size(data,2)  
  24.     state = -1;                                     % 说明窗口太大,图像太小,没必要获取  
  25.     disp('the window size is larger then image...');  
  26.     return;  
  27. end  
  28.   
  29. result = data;  
  30. if size(data,3) == 3  
  31.     for k=1:3  
  32.         for i=1:size(pointAll,1)   %画边框顺序为:上右下左的原则  
  33.             result(pointAll(i,1),pointAll(i,2):pointAll(i,2)+windSize(i,1),k) = rgb(1,k);     
  34.             result(pointAll(i,1):pointAll(i,1)+windSize(i,2),pointAll(i,2)+windSize(i,1),k) = rgb(1,k);  
  35.             result(pointAll(i,1)+windSize(i,2),pointAll(i,2):pointAll(i,2)+windSize(i,1),k) = rgb(1,k);    
  36.             result(pointAll(i,1):pointAll(i,1)+windSize(i,2),pointAll(i,2),k) = rgb(1,k);    
  37.             if lineSize == 2 || lineSize == 3  
  38.                 result(pointAll(i,1)+1,pointAll(i,2):pointAll(i,2)+windSize(i,1),k) = rgb(1,k);    
  39.                 result(pointAll(i,1):pointAll(i,1)+windSize(i,2),pointAll(i,2)+windSize(i,1)-1,k) = rgb(1,k);  
  40.                 result(pointAll(i,1)+windSize(i,2)-1,pointAll(i,2):pointAll(i,2)+windSize(i,1),k) = rgb(1,k);  
  41.                 result(pointAll(i,1):pointAll(i,1)+windSize(i,2),pointAll(i,2)-1,k) = rgb(1,k);  
  42.                 if lineSize == 3  
  43.                     result(pointAll(i,1)-1,pointAll(i,2):pointAll(i,2)+windSize(i,1),k) = rgb(1,k);     
  44.                     result(pointAll(i,1):pointAll(i,1)+windSize(i,2),pointAll(i,2)+windSize(i,1)+1,k) = rgb(1,k);  
  45.                     result(pointAll(i,1)+windSize(i,2)+1,pointAll(i,2):pointAll(i,2)+windSize(i,1),k) = rgb(1,k);  
  46.                     result(pointAll(i,1):pointAll(i,1)+windSize(i,2),pointAll(i,2)+1,k) = rgb(1,k);  
  47.                 end  
  48.             end  
  49.         end  
  50.     end  
  51. end  
  52.   
  53. state = 1;  
  54.   
  55. if showOrNot == 1  
  56.     figure;  
  57.     imshow(result);  
  58. end  

在main函数中调用如下:

[plain]  view plain  copy
  1. % main.m  
  2. clc;  
  3. clear;  
  4. close all;  
  5.   
  6. data = imread('man_1.jpg');  
  7. pointAll = [5,20];  
  8. windSize = [100,30];  
  9.   
  10. [state,results]=draw_rect(data,pointAll,windSize);  
  11. return;  

原图像为:


结果图像为:


特别注意:图像中显示的坐标系和我们平时用的不一样!!!

你可能感兴趣的:(MATLAB)