function [state,result]=draw_rect(data,pointAll,windSize,showOrNot)

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

% 函数功能:在图像画个长方形框

% 函数输入:data为原始的大图,可为灰度图,可为彩色图

% pointAll 框的左上角在大图中的坐标(每行代表一个坐标),

% 注意:在图中的坐标系为第一列为y,第二列为x(很奇怪的)

% windSize 框的大小 windSize=[112,92] 分别表示长宽

% showOrNot 是否要显示,默认为显示出来

% 函数输出:state -- 表示程序结果状态

% result - 结果图像数据

% 函数历史: v0.0 @2013-01-27 created by Aborn

if nargin < 4

showOrNot = 1;

end

rgb = [255 255 0]; % 边框颜色

lineSize = 3; % 边框大小,取1,2,3

windSize(1,1)=windSize(1,1);

windSize(1,2) = windSize(1,2);

if windSize(1,1) > size(data,1) ||...

windSize(1,2) > size(data,2)

state = -1; % 说明窗口太大,图像太小,没必要获取

disp('the window size is larger then image...');

return;

end

result = data;

if size(data,3) == 3

for k=1:3

for i=1:size(pointAll,1) %画边框顺序为:上右下左的原则

result(pointAll(i,1),pointAll(i,2):pointAll(i,2)+windSize(i,1),k) = rgb(1,k);

result(pointAll(i,1):pointAll(i,1)+windSize(i,2),pointAll(i,2)+windSize(i,1),k) = rgb(1,k);

result(pointAll(i,1)+windSize(i,2),pointAll(i,2):pointAll(i,2)+windSize(i,1),k) = rgb(1,k);

result(pointAll(i,1):pointAll(i,1)+windSize(i,2),pointAll(i,2),k) = rgb(1,k);

if lineSize == 2 || lineSize == 3

result(pointAll(i,1)+1,pointAll(i,2):pointAll(i,2)+windSize(i,1),k) = rgb(1,k);

result(pointAll(i,1):pointAll(i,1)+windSize(i,2),pointAll(i,2)+windSize(i,1)-1,k) = rgb(1,k);

result(pointAll(i,1)+windSize(i,2)-1,pointAll(i,2):pointAll(i,2)+windSize(i,1),k) = rgb(1,k);

result(pointAll(i,1):pointAll(i,1)+windSize(i,2),pointAll(i,2)-1,k) = rgb(1,k);

if lineSize == 3

result(pointAll(i,1)-1,pointAll(i,2):pointAll(i,2)+windSize(i,1),k) = rgb(1,k);

result(pointAll(i,1):pointAll(i,1)+windSize(i,2),pointAll(i,2)+windSize(i,1)+1,k) = rgb(1,k);

result(pointAll(i,1)+windSize(i,2)+1,pointAll(i,2):pointAll(i,2)+windSize(i,1),k) = rgb(1,k);

result(pointAll(i,1):pointAll(i,1)+windSize(i,2),pointAll(i,2)+1,k) = rgb(1,k);

end

end

end

end

end

state = 1;

if showOrNot == 1

figure;

imshow(result);

end

在main函数中调用如下:

% main.m

clc;

clear;

close all;

data = imread('man_1.jpg');

pointAll = [5,20];

windSize = [100,30];

[state,results]=draw_rect(data,pointAll,windSize);

return;

原图像为:

9e3bfa9461910dae1ddafe443b083d0f.png

结果图像为:

02cd04717f35c41900de3e2db0db5337.png

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

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐