新能源车车牌识别c++
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++相关推荐
- C++中文车牌识别检测系统源码
下载地址:C++中文车牌识别检测系统源码 其目标是成为一个简单.高效.准确的非限制场景(unconstrained situation)下的车牌识别库. 相比于其他的车牌识别系统,EasyPR有如下特 ...
- 新能源车牌识别SDK核心算法不断更新
新能源车牌识别SDK的应用背景 2016年12月1日,新能源车牌照在上海.深圳.南京.无锡.济南试点发行.启用新能源汽车号牌,一方面可以更有效.更便捷的区分辨识新能源汽车,实施差异化交通管理政策,为新 ...
- 新能源车辆越来越多了,车牌识别核心技术
新能源车牌识别SDK的应用背景2016年12月1日,新能源车牌照在上海.深圳.南京.无锡.济南试点发行.启用新能源汽车号牌,一方面可以更有效.更便捷的区分辨识新能源汽车,实施差异化交通管理政策,为新能 ...
- opencv 车牌识别---新能源车牌处理(二值化后按位取反)
场景: 在对车牌号进行识别时,不能识别出新能源车牌的车牌号. 问题原因: 因为我们的识别模板都是黑底白字,新能源的车牌进行二值化处理后都是白地黑字. 模板: 新能源车牌原图(部分): 新能源车牌二 ...
- 移动端车牌识别:新能源车牌识别上线
新能源车牌诞生背景: "2016年4月18日,为更好区分辨识新能源汽车,实施差异化交通管理,我国将启用新能源汽车专用号牌.交管局设计了新能源车牌式样,向社会公开征求意见建议,即日起公众可参与 ...
- 新能源充电桩兴起,智能车牌识别相机助力其发展
伴随国家发改委首次明确"新基建"范围,新能源汽车充电桩纳入新基建,再次成为焦点. 新能源充电桩兴起,智能车牌识别相机助力其发展 2020年行业投资额达100亿,将建60万个充电桩: ...
- 移动端扫描车牌识别,新能源车牌OCR识别已研发
移动端扫描车牌自动识别技术的技术核心:移动端车牌识别,手机端车牌识别,手持端车牌识别,Android端车牌识别,ios车牌识别,统统都是以OCR识别技术为基础,车牌定位凹凸字体处理二值化字符切割一系列 ...
- 外地车 摄像头 android,Android端车牌识别可以用来实现摄像头扫描识别车牌?
原标题:Android端车牌识别可以用来实现摄像头扫描识别车牌? 随着汽车的需求暴增,车辆管理成为了城市管理的重中之重.Android端车牌识别技术已被广泛应用于城市智能交通.智慧小区的系统中,以往是 ...
- 2如何识别操作系统_扫描车牌识别车牌号的功能sdk
扫描车牌识别车牌号的功能sdk OCR (Optical Character Recognition,光学字符识别)是指电子设备(例如扫描仪或数码相机)检查纸上打印的字符,通过检测暗.亮的模式确定其形 ...
最新文章
- LoadRunner监控Linux
- GP通过外部表装载数据时遇到ERROR:extra data after last expected column解决方法
- (转)access和SQL语句的区别
- 关于第十五届全国大学生智能车竞赛 STC 单片机
- ESAComp 2020中文版
- 使用Python管理Azure(1):基础配置
- IIS配置网站定时任务必设参数图文教程
- Kubernetes 入门必备云原生发展简史
- FICO 最常用配置表
- restful-api接口的设计规范介绍
- 第8章例题 6-4 输入年份和天数,输出对应的年、月、日
- MonoRail学习笔记十一:页面控件的填充和验证
- Java基础篇:如何使用continue语句
- fastboot工具使用
- WIN11映射NAS网络驱动器提示 用户名和密码错误
- 校园二手交易平台的简要分析(纯文档)
- MMA8452Q 三轴加速度传感器驱动
- Snipast截图软件
- 水电图纸——管道的预埋和盒子的放置-1
- 一个视频发布在三个平台上,可以赚三份收益,自媒体如何发布视频