用VC或matlab检测图像中的对象是否为矩形 我刚学不懂 请高帮我解解 最好是代码和解说

如题所述

给你写了个例子,可以处理简单的问题,算是给你引引思路吧。

这是一个matlab函数,输入bmp文件的文件名,输出是不是矩形的判断

function s=ident_rec(bmp_name)

pic=imread(bmp_name);%读取图片

in_count=0;%黑点计数器

bd_count=0;%边界点计数器

corner=[];%角点列表

corner_count=0;%角点计数器

aa=size(pic);

%注意像素点白色为0黑色为1

for i=2:(aa(1)-1)

    for j=2:(aa(2)-1)

        if (pic(i,j)==0)%选出颜色为黑的点

            in_count=in_count+1;%黑点累加

            if ((pic(i+1,j)^2 + pic(i-1,j)^2 + pic(i,j+1)^2 + pic(i,j-1)^2)>0)%如果上下左右点存在白点

                bd_count=bd_count+1;%当前点为边界点,边界点累加

                if ((pic(i+1,j)^2 + pic(i-1,j)^2 + pic(i,j+1)^2 + pic(i,j-1)^2)>1)%如果上下左右存在多于1个白点

                    corner=[corner;[i j]];%当前点为角点,角点累加

                    corner_count=corner_count+1;

                    

                end

            end

        end

    end

end

s='不是矩形';%默认输出不是矩形

if (corner_count==4)%如果共有四个角点

    

    %计算2,3,4号角点到1号角点的距离

    a(1,:)=norm(corner(2,:)-corner(1,:));

    a(2,:)=norm(corner(3,:)-corner(1,:));

    a(3,:)=norm(corner(4,:)-corner(1,:));

    

    b=sort(a);%从小到大排序

    

    if (sqrt(b(1)^2+b(2)^2-b(3)^2)<1)%如果满足勾股定理,就是矩形

    s='矩形';

    end

end

测试:

s=ident_rec('pic1.bmp')

s=ident_rec('pic2.bmp')

s=ident_rec('pic3.bmp')

输出结果是:

s =

矩形

s =

不是矩形

s =

不是矩形

pic1.bmp;pic2.bmp;pic3.bmp是三个bmp图,白底,然后中间画黑色图形。第一个矩形,第二个三角形,第三个圆形。这里没法上传附件,我就给你截了个资源管理器里的预览图。你自己那画图板工具画一下就行。记得保存成“单色位图”!!!格式

温馨提示:答案为网友推荐,仅供参考
第1个回答  2010-11-24
数据矩阵的有数值的为方形的
相似回答