EasyPR中主要涉及到蓝色底牌与黄色底牌、白色底牌的车牌识别,随着新能源车辆的发展,目前有很多绿色底牌的车牌,因此增加绿色车牌的识别。

  EasyPR中关于车牌的识别,已经比较完善,这里主要涉及到三个地方的修改。

1.添加颜色

include/easypr/config.h

在自定义Color的枚举类中,添加 绿色,修改之后为:

enum Color { BLUE, YELLOW, WHITE, GREEN, UNKNOWN };

添加绿色识别

  在OpenCV或其他软件中,识别颜色主要通过RGB映射到HSV空间,通过判断H、S、V的相关值来判断颜色的,主要原理可以参考:OpenCV颜色识别。修改之后的部分代码如下:

src/core/core_func.cpp

 Mat colorMatch(const Mat &src, Mat &match, const Color r,const bool adaptive_minsv) {// if use adaptive_minsv// min value of s and v is adaptive to hconst float max_sv = 255;const float minref_sv = 64;const float minabs_sv = 95; //95;// H range of blue const int min_blue = 100;  // 100const int max_blue = 140;  // 140// H range of yellowconst int min_yellow = 15;  // 15const int max_yellow = 40;  // 40// H range of whiteconst int min_white = 0;   // 15const int max_white = 30;  // 40//Louis add,green  // H range of greenconst int min_green = 35;   // 35const int max_green = 80;   // 80Mat src_hsv;// convert to HSV spacecvtColor(src, src_hsv, CV_BGR2HSV);std::vector<cv::Mat> hsvSplit;split(src_hsv, hsvSplit);equalizeHist(hsvSplit[2], hsvSplit[2]);merge(hsvSplit, src_hsv);// match to find the colorint min_h = 0;int max_h = 0;switch (r) {case BLUE:  min_h = min_blue;max_h = max_blue;break;    case YELLOW:min_h = min_yellow;max_h = max_yellow;break;    case WHITE: min_h = min_white;max_h = max_white;break;    //Louis add,green  case GREEN: min_h = min_green;max_h = max_green;break;    default:    // Color::UNKNOWNbreak;    }           float diff_h = float((max_h - min_h) / 2);float avg_h = min_h + diff_h;                                                                                                                                                                   int channels = src_hsv.channels();int nRows = src_hsv.rows;// consider multi channel imageint nCols = src_hsv.cols * channels;if (src_hsv.isContinuous()) {nCols *= nRows;nRows = 1;}           int i, j;   uchar* p;   float s_all = 0;float v_all = 0;float count = 0;for (i = 0; i < nRows; ++i) {p = src_hsv.ptr<uchar>(i);for (j = 0; j < nCols; j += 3) {int H = int(p[j]);      // 0-180int S = int(p[j + 1]);  // 0-255int V = int(p[j + 2]);  // 0-255s_all += S;v_all += V;count++;bool colorMatched = false;if (H > min_h && H < max_h) {float Hdiff = 0;if (H > avg_h)Hdiff = H - avg_h;else  Hdiff = avg_h - H;                                                                                                                                                                      float Hdiff_p = float(Hdiff) / diff_h;float min_sv = 0;if (true == adaptive_minsv)min_sv =minref_sv -minref_sv / 2 *(1 - Hdiff_p);  // inref_sv - minref_sv / 2 * (1 - Hdiff_p)else min_sv = minabs_sv;  // addif ((S > min_sv && S < max_sv) && (V > min_sv && V < max_sv))colorMatched = true;}      if (colorMatched == true) {p[j] = 0;p[j + 1] = 0;p[j + 2] = 255;}      else { p[j] = 0;p[j + 1] = 0;p[j + 2] = 0;}}}// cout << "avg_s:" << s_all / count << endl;// cout << "avg_v:" << v_all / count << endl;// get the final binaryMat src_grey;std::vector<cv::Mat> hsvSplit_done;split(src_hsv, hsvSplit_done);src_grey = hsvSplit_done[2];match = src_grey;return src_grey;}

其中RGB与HSV颜色识别对应的关系,可以参考:OpenCV中HSV颜色模型及颜色分量范围

增加字符限制

  以前的车牌主要是7位字符,包括省 [A-Z].[5位字符] 的方式。但新能源车牌,后面5为字符变为6位字符,因此之前的判断方法不能够获取全部车牌,最好的情况也只能获得前面的7位字符。因此需要修改为:

src/core/chars_segment.cpp

int CCharsSegment::RebuildRect(const vector<Rect>& vecRect,vector<Rect>& outRect, int specIndex) {   int count = 7;//Louis changed 6->7, for green plate carfor (size_t i = specIndex; i < vecRect.size() && count; ++i, --count) {outRect.push_back(vecRect[i]);                       }                                                      return 0;
}                

至此,可以识别绿色车牌。

新能源车车牌识别c++相关推荐

  1. C++中文车牌识别检测系统源码

    下载地址:C++中文车牌识别检测系统源码 其目标是成为一个简单.高效.准确的非限制场景(unconstrained situation)下的车牌识别库. 相比于其他的车牌识别系统,EasyPR有如下特 ...

  2. 新能源车牌识别SDK核心算法不断更新

    新能源车牌识别SDK的应用背景 2016年12月1日,新能源车牌照在上海.深圳.南京.无锡.济南试点发行.启用新能源汽车号牌,一方面可以更有效.更便捷的区分辨识新能源汽车,实施差异化交通管理政策,为新 ...

  3. 新能源车辆越来越多了,车牌识别核心技术

    新能源车牌识别SDK的应用背景2016年12月1日,新能源车牌照在上海.深圳.南京.无锡.济南试点发行.启用新能源汽车号牌,一方面可以更有效.更便捷的区分辨识新能源汽车,实施差异化交通管理政策,为新能 ...

  4. opencv 车牌识别---新能源车牌处理(二值化后按位取反)

    场景: 在对车牌号进行识别时,不能识别出新能源车牌的车牌号. 问题原因:   因为我们的识别模板都是黑底白字,新能源的车牌进行二值化处理后都是白地黑字. 模板: 新能源车牌原图(部分): 新能源车牌二 ...

  5. 移动端车牌识别:新能源车牌识别上线

    新能源车牌诞生背景: "2016年4月18日,为更好区分辨识新能源汽车,实施差异化交通管理,我国将启用新能源汽车专用号牌.交管局设计了新能源车牌式样,向社会公开征求意见建议,即日起公众可参与 ...

  6. 新能源充电桩兴起,智能车牌识别相机助力其发展

    伴随国家发改委首次明确"新基建"范围,新能源汽车充电桩纳入新基建,再次成为焦点. 新能源充电桩兴起,智能车牌识别相机助力其发展 2020年行业投资额达100亿,将建60万个充电桩: ...

  7. 移动端扫描车牌识别,新能源车牌OCR识别已研发

    移动端扫描车牌自动识别技术的技术核心:移动端车牌识别,手机端车牌识别,手持端车牌识别,Android端车牌识别,ios车牌识别,统统都是以OCR识别技术为基础,车牌定位凹凸字体处理二值化字符切割一系列 ...

  8. 外地车 摄像头 android,Android端车牌识别可以用来实现摄像头扫描识别车牌?

    原标题:Android端车牌识别可以用来实现摄像头扫描识别车牌? 随着汽车的需求暴增,车辆管理成为了城市管理的重中之重.Android端车牌识别技术已被广泛应用于城市智能交通.智慧小区的系统中,以往是 ...

  9. 2如何识别操作系统_扫描车牌识别车牌号的功能sdk

    扫描车牌识别车牌号的功能sdk OCR (Optical Character Recognition,光学字符识别)是指电子设备(例如扫描仪或数码相机)检查纸上打印的字符,通过检测暗.亮的模式确定其形 ...

最新文章

  1. LoadRunner监控Linux
  2. GP通过外部表装载数据时遇到ERROR:extra data after last expected column解决方法
  3. (转)access和SQL语句的区别
  4. 关于第十五届全国大学生智能车竞赛 STC 单片机
  5. ESAComp 2020中文版
  6. 使用Python管理Azure(1):基础配置
  7. IIS配置网站定时任务必设参数图文教程
  8. Kubernetes 入门必备云原生发展简史
  9. FICO 最常用配置表
  10. restful-api接口的设计规范介绍
  11. 第8章例题 6-4 输入年份和天数,输出对应的年、月、日
  12. MonoRail学习笔记十一:页面控件的填充和验证
  13. Java基础篇:如何使用continue语句
  14. fastboot工具使用
  15. WIN11映射NAS网络驱动器提示 用户名和密码错误
  16. 校园二手交易平台的简要分析(纯文档)
  17. MMA8452Q 三轴加速度传感器驱动
  18. Snipast截图软件
  19. 水电图纸——管道的预埋和盒子的放置-1
  20. 一个视频发布在三个平台上,可以赚三份收益,自媒体如何发布视频

热门文章

  1. 计算机本科毕业要求,计算机本科毕业论文要求.doc
  2. 微信小程序上传图片、长按删除及预览图片
  3. 英语、日语学习网站软件
  4. FICO-固定资产报废处置流程ABAVN
  5. [Erlang 0111] Erlang Abstract Format , Part 2
  6. TestFlight构建版本提示缺少出口合规证明
  7. 参考文献中英文人名_参考文献英文名字应该怎么写?
  8. 房讯房屋租赁管理软件新版上线 专为房东朋友定制
  9. adb安装配置及连接手机
  10. arcgis api 4.11之距离和面积测量实现