我是靠谱客的博主 威武泥猴桃,最近开发中收集的这篇文章主要介绍matlab的交通灯信号识别,matlab的交通灯信号识别,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

一小段txt程序代码

clc

clear all

close all

a=imread('x.jpg');

figure(1),imshow(a);title('检测图像');%读入图像并显示

hsv=rgb2hsv(a);

h=hsv(:,:,1);

s=hsv(:,:,2);

v=hsv(:,:,3);

figure(2),imshow(hsv);title('HSV图像');%转换为hsv图像并显示

bw1=h>0.9|h<0.05;

bw1=bw1.*(s>0.5);%检测红色区域

se=strel('disk',3);%创建一个指定半径R的平面圆盘形的结构元素

bw2=imopen(bw1,se);%用结构元素SE实现二值图像的bw1的形态开运算。SE可以是单个结构元素对象或者结构元素对象数组。

bw2=bwfill(bw2,'holes');%空洞填充,填充二进制图像的背景色

% % % figure

% % % imshow(bw2)

[L,num]=bwlabel(bw2,8);%标记各区域,这里num返回的就是BW2中连通区域的个数。

STATS = regionprops(L,'area','BoundingBox');%%对二值化数据进行连通域数据分析获取标记后的图像面积。外接长方形、和面积

bw_area=zeros(1,num);

bw_circle=zeros(1,num);

% % % bw_center=zeros(num,2);

figure(1),imshow(a);title('检测图像');%读入图像并显示

hold on

for i=1:num

[r,c]=find(L==i);%返回的是L矩阵中数值为i的坐标

sizer=size(r,1);

bw_area(i)=length(r);

if bw_area(i)<200|bw_area(i)>10000

continue;

end %去掉过大过小区域

bw_center=[];

bw_center(1:sizer,1)=round(mean(r));%行坐标,求区域中心;mean(A)求每一列的均值;Round返回按指定位数进行四舍五入的数值

bw_center(1:sizer,2)=round(mean(c));%列坐标

rc=[r,c];

d=sqrt(sum((rc'-bw_center').^2));%计算区域中各点到中心的距离

max1=max(d);%求最大距离

bw_circle(i)=bw_area(i)/(pi*max1*max1);%计算圆形度

if bw_circle(i)<0.6

bw_center(i)=0;

continue; %去掉不够圆的区域

end

rectangle('Position',floor(STATS(i).BoundingBox),'EdgeColor','g','linewidth',3);%%取最大一个的外接长方形作为目标位置

x=round(STATS(i).BoundingBox(1)+0.5*STATS(i).Boundi

ngBox(3))-10;

y=round(STATS(i).BoundingBox(2)+0.5*STATS(i).BoundingBox(4));

text(x,y,'红色');

end %在原图上标记红色信号灯区域

hold off

最后

以上就是威武泥猴桃为你收集整理的matlab的交通灯信号识别,matlab的交通灯信号识别的全部内容,希望文章能够帮你解决matlab的交通灯信号识别,matlab的交通灯信号识别所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(93)

评论列表共有 0 条评论

立即
投稿
返回
顶部