package demo;
为科尔沁等地区用户提供了全套网页设计制作服务,及科尔沁网站建设行业解决方案。主营业务为网站建设、成都网站制作、科尔沁网站设计,以传统方式定制建设网站,并提供域名空间备案等一条龙服务,秉承以专业、用心的态度为用户提供真诚的服务。我们深信只要达到每一位用户的要求,就会得到认可,从而选择与我们长期合作。这样,我们也可以走得更远!
import java.util.Scanner;
public class CarCard {
//浙A 杭州,浙B 宁波,浙C 温州,浙D 绍兴,浙E 湖州,浙F 嘉兴,浙G 金华,浙H 衢州,浙J 台州,浙K 丽水,浙L 舟山
//网上搜的,应该是对的,这个东西应该管你要
public static void main(String[] args) {
System.out.println("请输入车牌号");
Scanner sc = new Scanner(System.in);
String carno = sc.next();
String t = carno.substring(0,2);
checkAddressByCarCard(t);
}
private static void checkAddressByCarCard(String no){
String a[]={"浙A","浙B","浙C","浙D","浙E","浙F","浙G","浙H","浙J","浙K","浙L"};
String b[]={"杭州","宁波","温州","绍兴","湖州","嘉兴","金华","衢州","台州","丽水","舟山"};
int index = 0;
for(int i = 0;i11;i++){
if(no.equalsIgnoreCase(a[i])){
index=i;
System.out.println("车辆所在地为:"+b[i]);
}
}
}
}
//不严谨,但是基本功能实现了
肯定可以啦,变量放在上层程序中,作为参数传递给各个不同功能函数。
主函数: close all; clear all;
%% 归一化训练样本
I0=pretreatment(imread('BP/0.jpg')); I1=pretreatment(imread('BP/1.jpg')); I2=pretreatment(imread('BP/2.jpg')); I3=pretreatment(imread('BP/3.jpg')); I4=pretreatment(imread('BP/4.jpg')); I5=pretreatment(imread('BP/5.jpg')); I6=pretreatment(imread('BP/6.jpg')); I7=pretreatment(imread('BP/7.jpg')); I8=pretreatment(imread('BP/8.jpg')); I9=pretreatment(imread('BP/9.jpg')); I10=pretreatment(imread('BP/A.jpg')); I11=pretreatment(imread('BP/B.jpg')); I12=pretreatment(imread('BP/C.jpg')); I13=pretreatment(imread('BP/G.jpg')); I14=pretreatment(imread('BP/L.jpg')); I15=pretreatment(imread('BP/M.jpg')); I16=pretreatment(imread('BP/N.jpg')); I17=pretreatment(imread('BP/P.jpg'));
P=[I0',I1',I2',I3',I4',I5',I6',I7',I8',I9',I10',I11',I12',I13',I14',I15',I16',I17']; T=eye(18,18); %输出样本 %% bp神经网络参数设置
net=newff(minmax(P),[1250,32,18],{'logsig','logsig','logsig'},'trainrp'); net.inputWeights{1,1}.initFcn ='randnr'; net.layerWeights{2,1}.initFcn ='randnr'; net.trainparam.epochs=5000; net.trainparam.show=50; %net.trainparam.lr=0.003;
net.trainparam.goal=0.0000000001; net=init(net);
[net,tr]=train(net,P,T); %训练样本 %% 测试
%I=imread('CAR/0.jpg'); DW=Location();%车牌定位
[PIN0,PIN1,PIN2,PIN3,PIN4,PIN5,PIN6]=StringSplit(DW);%字符分割及处理 %% 测试字符,得到识别数值 PIN0=pretreatment(PIN0); PIN1=pretreatment(PIN1); PIN2=pretreatment(PIN2);
PIN3=pretreatment(PIN3); PIN4=pretreatment(PIN4); PIN5=pretreatment(PIN5); PIN6=pretreatment(PIN6);
P0=[PIN0',PIN1',PIN2',PIN3',PIN4',PIN5',PIN6']; for i=2:7
T0= sim(net ,P0(:,i)); T1 = compet (T0) d = find(T1 == 1) - 1; if (d==10) str='A'; elseif (d==11) str='B'; elseif (d==12) str='C'; elseif (d==13) str='G'; elseif (d==14) str='L'; elseif (d==15) str='M'; elseif (d==16) str='N'; elseif (d==17) str='P'; elseif (d==0) str='0'; elseif (d==1) str='1'; elseif (d==2) str='2'; elseif (d==3) str='3'; elseif (d==4) str='4'; elseif (d==5) str='5'; elseif (d==6) str='6'; elseif (d==7) str='7'; elseif (d==8) str='8'; elseif (d==9) str='9'; else
str=num2str(d); end
switch i case 2
str2=str; case 3
str3=str; case 4
str4=str;
case 5
str5=str; case 6
str6=str; otherwise str7=str; end end
%% 识别出的结果以标题形式显示在图上
S=strcat('云',str2,str3,str4,str5,str6,str7); figure();
imshow(DW),title(S,'fontsize',40);
逐句 可能没法呢 寡人已经在论坛解释过了 有问题呼我把
首先
1、定位部分 [temp MaxY]=max(white_y); %temp为向量white_y的元素中的最大值,MaxY为该值的索引(在向量中的位置),也就是说temp为车牌矩阵每一列求和的最大值,即车牌x方向最多像素的地方,(姑且叫他像素中线)那么
while ((Blue_y(PY1,1)=5)(PY11)) PY1=PY1-1; 就可以确实车牌上边缘,同理
while ((Blue_y(PY2,1)=5)(PY2y)) PY2=PY2+1;确定下边缘 。为什么是大于5呢,刚才已经知道是车牌x方向所有列的和,也就是宽,车牌单个字符,那么范围为0-128px,如果值越大,则上下边缘就像素中线就近了,那么车牌车牌横向就短了嘛
,同理。while ((Blue_y(1,PX1)3)(PX1x)) PX1=PX1+1;
为什么是3呢。,车牌单个字符的,值确定,那么车牌车牌纵向区域就窄了
2、分割:
首先对车牌图像自左向右逐列扫描,寻找连续有文字的区间块,将该区间块的有效宽度与某一固定阈值(本文设定的阈值为10,可更改)进行比较,若小于该设定阈值,则认为是左侧干扰,裁剪干扰区域;反之,分割出该模糊
字符块。
3)判断该字符区域是否为有效区域。首先建立矩阵,依据车牌先验知识,分析该字符区域的有效宽度及宽高比(1:2),即可判断是否为干扰区域,若为字符区域,进一步去除伪字符区域,则分割出第一个字符;反之,认为是左侧干扰区域进行裁剪。
解释:本程序对于定位部分比较理想的情况下 分割率为50%+,但对川字车牌没有鲁棒性,由于川字未连通,所以会被当作背景而切除,其他省份,暂时没有遇到过。当然如果定位后的车牌倾角大于20度这样,那么必须校正,否则会出错
3、分割:这部分就悲剧了,采用的是单纯的模板相减,并且程序没有标准模板
建议计算相关系数,用距离变换进行匹配把
String cph="WJ12345";
Pattern pattern = Pattern.compile("^[\u4e00-\u9fa5|WJ]{1}[A-Z0-9]{6}$");
Matcher matcher = pattern.matcher(cph);
if (!matcher.matches()) {
System.out.println("车牌号格式不对!");
}else{
System.out.println("车牌号格式正确!");
}