【图像处理】简单的车牌识别
前段时间刚刚把毛星云的OpenCV大体上过完了一遍,所以找了个图像处理的小项目练练手。
研一的时候做过车牌识别的小demo,当时对图像处理的一些方法的理解还不是很深刻。
在网上浏览学习了以后,参考学习了图像处理基本算法 车牌识别与定位这篇博客的思路,然后自己编程实现,具体的思路函数大概和前面的物资识别差不多:
1、车牌识别只能针对部分蓝色车牌识别成功,其他颜色的车牌会陆续优化整理的
由于蓝色车牌的RGB的值为R=28 G=63 B=138,第一步就是利用蓝色车牌的RGB来大体找到整幅图片中,车牌的位置
由于车牌特定的颜色,在效果图中,车牌的位置已经很明显了。
2、为了更加突出车牌的位置,利用形态学滤波的闭运算。
3、为了去除图中其他较小的噪声点,框出车牌位置,使用查找轮廓,计算每一个查找到的轮廓的最小外接矩形,利用矩形的像素面积进行筛选,最终得到车牌具体位置,使用矩形函数将其框出
注:这个地方我遇到了一个小坑,因为原图像是三通道的彩色图,使用颜色判别后的二值图,并不是真正的二值图,通道数仍是三,所以当进行轮廓查找时候,会出现通道错误
解决方法:针对第一个步骤得到的“二值图”,我对结果图进行了一次灰度化和二值化的一个转换,最后把二值图的通道转变为1,这样就可以使用查找轮廓函数而不会报错了
具体代码如下:
#include<opencv2/opencv.hpp>
#include<iostream>
using namespace std;
using namespace cv;int main()
{Mat src = imread("demo.jpg",1);Mat srcImg = src.clone();for (int i = 0; i < srcImg.rows; i++){for (int j = 0; j < srcImg.cols; j++){if (abs(srcImg.at<Vec3b>(i, j)[0] - 138) < 50&& abs(srcImg.at<Vec3b>(i, j)[1] - 63) < 50&& abs(srcImg.at<Vec3b>(i, j)[2] - 28) < 50){srcImg.at<Vec3b>(i, j)[0] = srcImg.at<Vec3b>(i, j)[1] = srcImg.at<Vec3b>(i, j)[2] = 255;}elsesrcImg.at<Vec3b>(i, j)[0] = srcImg.at<Vec3b>(i, j)[1] = srcImg.at<Vec3b>(i, j)[2] = 0;}}Mat matGray; //灰度化cvtColor(srcImg, matGray, CV_BGR2GRAY);Mat Bin;threshold(matGray,Bin,100,255,CV_THRESH_BINARY);imshow("二值化",Bin); //二值化后的图像应为单通道图像Mat ele = getStructuringElement(MORPH_RECT,Size(15,15));Mat Mor;morphologyEx(Bin, Mor,MORPH_CLOSE,ele); //闭运算效果图 srcImg1imshow("闭运算",Mor);//查找轮廓Mat srcImg2 = Mor.clone();vector<vector<Point>> contours;vector<Vec4i> hierarchy;findContours(srcImg2,contours,hierarchy,RETR_CCOMP,CHAIN_APPROX_SIMPLE,Point());vector<Rect> boundRect(contours.size());//定义外接矩形集合vector<RotatedRect> box(contours.size());//定义最小外接矩形集合Point2f rect[4];//获取整个图像的最大块面积,即视作车牌面积double maxArea = 0;for (int x = 0; x < contours.size(); x++){if(maxArea<contourArea(contours[x]))maxArea = contourArea(contours[x]);}for (size_t i = 0; i < contours.size(); i++){Mat contour(contours[i]);double area = contourArea(contour);if(area<maxArea) continue; box[i] = minAreaRect(contour);//计算每个轮廓最小外接矩形boundRect[i] = boundingRect(contour); // boundingRect计算轮廓的垂直边界最小矩形,矩形是与图像上下界平行的box[i].points(rect); //把最小外接矩形的四个端点复制给rect数组rectangle(src, Point(boundRect[i].x, boundRect[i].y), Point(boundRect[i].x + boundRect[i].width, boundRect[i].y + boundRect[i].height), Scalar(0, 0, 255), 4, 8); }imshow("结果图", src); waitKey(0);return 0;
}
结果图:
图中,车牌已经被圈出来了,
总结不足:(针对不足,后面学习之余,会陆续完善的,慢慢完善这个车牌识别的程序)
1、这个代码似乎是为这种相同类型的车牌图所编写的,并不具有较好的普适性
2、由于颜色的原因,图片中可能会有大比车牌大的面积,会出现错误的情况(这个已经有了具体思路,有待完善)
3、只能识别一幅图中的一张车牌,出现多张车牌,则识别错误
4、只能识别蓝色车牌
下面是其他一些车牌的识别,以后的学习中,会慢慢改进:
【图像处理】简单的车牌识别相关推荐
- 图像处理基本算法 车牌识别与定位
图像处理基本算法 车牌识别与定位 标签: 图像处理 2013-02-20 22:35 4416人阅读 评论(1) 收藏 举报 分类: opencv(27) 版权声明:本文为博主原创文章, ...
- 基于OpenCV简单的车牌识别
OpenCV是计算机视觉中经典的专用库,其支持多语言.跨平台,功能强大. OpenCV-Python为OpenCV提供了Python接口,使得使用者在Python中能够调用C/C++,在保证易读性和运 ...
- 开源车牌识别项目,OpenALPR
今天在github上看到了一个开源的车牌识别项目,OpenALPR.github链接 我以前自己在MATLAB上编写了一个简单的车牌识别的程序,使用的是传统模板匹配法.只是有了初步的效果,还有很多需要 ...
- 车牌识别及验证码识别的一般思路
本文源自我之前花了2天时间做的一个简单的车牌识别系统.那个项目,时间太紧,样本也有限,达不到对方要求的95%识别率(主要对于车牌来说,D,0,O,I,1等等太相似了.然后,汉字的识别难度也不小),因此 ...
- 数字图像处理中的车牌识别
车牌识别是一种通过计算机视觉技术和图像处理技术来识别车辆车牌号码的技术.它可以通过摄像头捕捉车辆的图像,对图像进行处理和分析,从而自动识别车辆的车牌号码.这项技术在交通管理.安防.停车场管理等领域都有 ...
- 基于SVM的车牌识别
目录 一.摘要........................................................................................ 6 二. ...
- 图形数字的识别算法: 车牌识别及验证码识别的一般思路
图形数字的识别算法: 车牌识别及验证码识别的一般思路 本文源自我之前花了2 天时间做的一个简单的车牌识别系统.那个项目,时间太紧,样本也有限,达不到对方要求的95% 识别率(主要对于车牌来说,D,0 ...
- Python+Opencv简易车牌识别(二):形态学运算,HSV颜色空间筛选与图像分割
注:这是依然一个简单的车牌识别demo 1.前言 在上一篇Python+Opencv简易车牌识别(一):基于HSV颜色空间的图像分割中,我们讲了如何仅基于颜色来进行简单粗暴的车牌分割.今天我们考虑对图 ...
- AI智能车牌识别技术如何提升出行体验?
什么是AI智能车牌识别技术? AI智能车牌识别技术是计算机视频图像识别技术在车牌识别中的应用.车牌号识别技术要求从复杂的动态背景中获取和识别到目标的车牌号,通过对车牌号的获取.图像预的处理.目标特征的 ...
最新文章
- Azure实践系列 1:部署和基本配置Azure AD
- java中formfile,基于Struts FormFile上传文件
- 最新 C++的iostream标准库介绍(1)
- Qt窗口操作函数(最大化,全屏,隐藏最大化,最小化)
- Linux学习笔记 -- 日志管理
- 一个简单的nginx配置
- 古代汉语(王力版)笔记 通论8-9
- Hive数据分析案例——汽车销售数据分析
- RGB转YCbCr422_BT709颜色空间转换仿真
- cad查看_CAD手机看图软件中批注的图片在电脑上如何查看?
- 9. 机器人正运动学---修改DH参数
- 红宝书背诵笔记 — 必考词
- 苹果7pnfc功能门禁卡_苹果7plus怎么打开nfc这个功能
- 2020高考倒计时html,2020高考倒计时的励志说说
- html左侧导航栏点击下拉菜单,HTML+CSS实现下拉菜单
- ARM NEON优化3.RGB Packed转RGB Planar
- Python:通过网络爬虫实现一个简易控制台音乐播放器
- 内核线程注入(x64)
- Python中用turtle库画旋涡
- 1.1 信息系统与信息化
热门文章
- BeanDefinition 属性详解
- mysql Excel导出文件损坏_phpexcel 导出excel无法打开,提示文件格式或文件名无效,文件损毁,解决办法...
- CreateEvent()的参数说明
- SQL常用查询语法整理
- HTTP代理中的api 代理的使用方法有什么?
- 用HTML+CSS做一个漂亮简单的个人网页~个人相册介绍个人主页模板(6个页面) ~学生HTML个人网页作业作品~...
- C++点云PCL基础ROS代码
- 慕课网自动化登录测试脚本
- 车险赔付率分析报告_车险理赔案例分析总结
- 集训笔记---扩展欧几里德算法(POJ NO.1061 青蛙的约会 有点烦人小跳蛙gcd)