直接上程序:
%车牌识别程序
%根据hsv色彩定位法定位车牌,将图像转为HSV模型,获取每个像素点的HSV值,判断是否为蓝色像素点,统计每行每列蓝色像素点的个数,从而获取车牌位置
%根据该位置对原始彩色图像进行剪裁,并进行二值化,滤波、去点处理,为字符分割做准备
%按顺序切割出7个字符,并保存为7张图片
%分别提取图片和模板进行比较,将比较结果最接近的确定为对应模板,并最终显示车牌识别结果
I=imread('E:\车牌识别 - 2\程序、配套的字符模板、车牌照片 - 2\车牌照片\car2.jpg'); %读入车牌照片
figure(1),imshow(I),title('原图');
%%%%根据hsv色彩定位法定位车牌%%%%
Image=im2double(I); %把图像数据类型转换为double类型
Image=rgb2hsv(Image); %将RGB图像转化为hsv模型,H色相,S饱和度,V亮度
[y,x,~]=size(Image);
Blue_y = zeros(y, 1);
p=[0.56 0.71 0.4 1 0.3 1 0];
for i = 1 : y
for j = 1 : x
hij = Image(i, j, 1); %取出每个像素点的H、S、V值
sij = Image(i, j, 2);
vij = Image(i, j, 3);
if (hij>=p(1) && hij<=p(2)) &&( sij >=p(3)&& sij<=p(4))&&(vij>=p(5)&&vij<=p(6)) %若像素点的HSV处于蓝色的HSV范围
Blue_y(i, 1) = Blue_y(i, 1) + 1;%统计每行的蓝色像素点数目
end
end
end
[~, MaxY] = max(Blue_y);%获取蓝色像素点最多的行号
Th = p(7); %Th=0
PY1 = MaxY;
while ((Blue_y(PY1,1)>Th) && (PY1>0))%找到车牌上边界
PY1 = PY1 - 1;
end
PY2 = MaxY;
while ((Blue_y(PY2,1)>Th) && (PY2<y))%找到车牌下边界
PY2 = PY2 + 1;
end
PY1 = PY1 - 2; %上下边界校正(扩大)
PY2 = PY2 + 2;
if PY1 < 1 %如果图像内容只有车牌,上述校正可能会使得边界值超出合理范围,此处防止边界值超出图像范围
PY1 = 1;
end
if PY2 > y
PY2 = y;
end
It=I(PY1:PY2,:,:);%Y方向获取原图的车牌区域
figure(2),subplot(3,1,1),imshow(It),title('hsv色彩分割法进行车牌行定位结果');
IY &#