zoukankan      html  css  js  c++  java
  • matlab在图像中画长方形(框)

    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,23
    
    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;

    原图像为:

    结果图像为:

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

    from: http://blog.csdn.net/loveaborn/article/details/8545809

  • 相关阅读:
    git 配置免密上传,配置ssh key
    spring @value 为什么没有获取到值
    idea 下maven 导入本地jar,以及导入之后 java不能引用问题
    在git远程仓创建项目之后,提交本地项目的使用方法
    mysql 查询数据库参数命令
    spring Existing transaction found for transaction marked with propagation 'never' 解决
    nginx for ubuntu
    spring中for循环中事务
    面向接口编程详解(一)——思想基础
    实战MEF(5):导出元数据
  • 原文地址:https://www.cnblogs.com/GarfieldEr007/p/5599181.html
Copyright © 2011-2022 走看看