给你写了个例子,可以处理简单的问题,算是给你引引思路吧。
这是一个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图,白底,然后中间画黑色图形。第一个矩形,第二个三角形,第三个圆形。这里没法上传附件,我就给你截了个资源管理器里的预览图。你自己那画图板工具画一下就行。记得保存成“单色位图”!!!格式