OpenCV使用边缘提取、腐蚀、轮廓进行车牌定位
http://blog.csdn.net/superdont/article/details/24935383

版权声明:本文为博主原创文章,未经博主允许不得转载。
采用OpenCV249利用边缘检测、轮廓检测、腐蚀实现的车牌定位,具体为:
- Mat srcImage=imread("image/000.jpg");
- //imshow("a",srcImage);
- int i,j;
- int cPointR,cPointG,cPointB,cPoint;//currentPoint;
- Mat resizeImage;
- resize(srcImage,resizeImage,Size(400,300));
- Mat grayImage;
- cvtColor(resizeImage,grayImage, CV_BGR2GRAY);
- Mat medianImage;
- medianBlur(grayImage,medianImage,3); //最后一个参数需要为奇数
- Mat sobelImage;
- //参数为:源图像,结果图像,图像深度,x方向阶数,y方向阶数,核的大小,尺度因子,增加的值
- Sobel(medianImage,sobelImage,CV_8U,1,0,3,0.4,128);
- Mat normalizeImage;
- normalize(sobelImage,normalizeImage,255,0,CV_MINMAX);
- Mat binaryImage;
- threshold(normalizeImage,binaryImage, 100, 255, THRESH_BINARY_INV );
- Mat closeImage;
- //morphologyEx(binaryImage,closeImage,MORPH_CLOSE,Mat(3,1,CV_8U),Point(0,0),10); //闭运算
- Mat openImage(closeImage.rows,closeImage.cols,CV_8UC1);
- //morphologyEx(closeImage,openImage,MORPH_OPEN,Mat(3,3,CV_8U),Point(0,0),1); //开运算
- // erode(openImage,openImage,Mat(3,3,CV_8U),Point(-1,-1),10);
- dilate(binaryImage,openImage,Mat(3,3,CV_8U),Point(-1,-1),6);
- /*
- Mat rgbImage;
- cvtColor(openImage,rgbImage, CV_GRAY2BGR);
- */
- //cvtColor(openImage,openImage, CV_BGR2GRAY);
- //vector<vector<Point> > contours;
- //vector<Vec4i> hierarchy;
- //openImage=imread("test.png");
- imshow("openImage",openImage);
- /// Detect edges using canny
- // Canny( src_gray, canny_output, thresh, thresh*2, 3 );
- /// Find contours
- /* Mat thresholdImage;
- cvtColor(openImage,openImage, CV_BGR2GRAY);
- threshold( openImage,thresholdImage,127, 255, THRESH_BINARY );
- openImage=thresholdImage;*/
- vector<vector<Point> > contours;
- vector<Vec4i> hierarchy;
- findContours(openImage, contours, hierarchy, CV_RETR_EXTERNAL, CV_CHAIN_APPROX_SIMPLE, Point(0, 0) );
- Scalar color = Scalar( rng.uniform(0, 255), rng.uniform(0,255), rng.uniform(0,255) );
- for( int i = 0; i < contours.size(); i++ )
- {
- //使用边界框的方式
- CvRect aRect = boundingRect(contours[i]);
- int tmparea=aRect.height*aRect.height;
- if (((double)aRect.width/(double)aRect.height>2)&& ((double)aRect.width/(double)aRect.height<6)&& tmparea>=200&&tmparea<=25000)
- {
- rectangle(resizeImage,cvPoint(aRect.x,aRect.y),cvPoint(aRect.x+aRect.width ,aRect.y+aRect.height),color,2);
- //cvDrawContours( dst, contours, color, color, -1, 1, 8 );
- }
- }
- imshow("contour",resizeImage);
效果一般,部分测试图像:
测试了很多图片,这几张基本有个样子,通过调整腐蚀的次数,可以针对不同的图像进行定位。
参考资料:
学习OpenCV——车牌检测(定位):http://blog.csdn.net/yangtrees/article/details/7444470
OpenCV使用边缘提取、腐蚀、轮廓进行车牌定位的更多相关文章
- 车牌定位与畸变校正(python3.7,opencv4.0)
一.前言及思路简析 目前车牌识别系统在各小区门口随处可见,识别效果貌似都还可以.查阅资料后,发现整个过程又可以细化为车牌定位.畸变校正.车牌分割和内容识别四部分.本篇随笔主要介绍车牌定位及畸变校正两部 ...
- EasyPR--开发详解(2)车牌定位
这篇文章是一个系列中的第三篇.前两篇的地址贴下:介绍.详解1.我撰写这系列文章的目的是:1.普及车牌识别中相关的技术与知识点:2.帮助开发者了解EasyPR的实现细节:3.增进沟通. EasyPR的项 ...
- EasyPR源码剖析(4):车牌定位之Sobel算子定位
一.简介 sobel算子主要是用于获得数字图像的一阶梯度,常见的应用是边缘检测. Ⅰ.水平变化: 将 I 与一个奇数大小的内核进行卷积.比如,当内核大小为3时, 的计算结果为: Ⅱ.垂直变化: 将: ...
- 车牌识别LPR(四)-- 车牌定位
第四篇:车牌定位 车牌定位就是采用一系列图像处理或者数学的方法从一幅图像中将车牌准确地定位出来.车牌定位提取出的车牌是整个车牌识别系统的数据来源,它的效果的好坏直接影响到整个系统的表现,只有准确地定位 ...
- EasyPR源码剖析(2):车牌定位
上一篇主要介绍了车牌识别的整体框架和流程,车牌识别主要划分为了两个过程:即车牌检测和字符识别,而车牌识别的核心环节就是这一节主要介绍的车牌定位,即 Plate Locate.车牌定位主要是将图片中有可 ...
- 基于matlab的蓝色车牌定位与识别---识别
接着昨天的工作,把最后一部分识别讲完. 关于字符识别这块,一种最省事的办法是匹配识别,将所得的字符和自己的标准字符库相减,计算所得结果,值最小的即为识别的结果.不过这种方法是在所得字符较为标准的情况, ...
- 【原】基于matlab的蓝色车牌定位与识别---绪论
本着对车牌比较感兴趣,自己在课余时间摸索关于车牌的定位与识别,现将自己所做的一些内容整理下,也方便和大家交流. 考虑到车牌的定位涉及到许多外界的因素,因此有必要对车牌照的获取条件进行一些限定: 一.大 ...
- python-opencv实现简单的车牌定位
车牌定位的原理:https://blog.csdn.net/relocy/article/details/78705662 训练好的分类器:https://github.com/zeusees/Hyp ...
- OpenCV函数:提取轮廓相关函数使用方法
opencv中提供findContours()函数来寻找图像中物体的轮廓,并结合drawContours()函数将找到的轮廓绘制出.首先看一下findContours(),opencv中提供了两种定义 ...
随机推荐
- Maven中央仓库地址
Maven 中央仓库地址: 1. http://www.sonatype.org/nexus/ 2. http://mvnrepository.com/ (本人推荐仓库) 3. http://repo ...
- opencv3.1自带demo的介绍和运行操作。转载
opencv3.1自带demo的介绍和运行操作. 下列实验基本都试过,有些需要根据自己的电脑修改一些路径或者调试参数. 值得注意的是,控制台程序输入有时候要在图像所在的窗口输入相应的指令.我的电脑上安 ...
- .net通过WCF调用java发布的服务,获取数据
功能描述 java作为后台,连接数据库获取数据,然后发布SOAP services,让.net平台通过WCF进行引用. 实现步骤 1.在项目特定文件夹下,右键->添加服务引用,输入服务的url地 ...
- 云信推送通知 APN invalid Token
p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica; color: #e4af09; min-height: 14.0px } ...
- Hdu 3363 Ice-sugar Gourd(对称,圆)
Ice-sugar Gourd Time Limit: 5000/2000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)T ...
- 关于STM32的IO口速率问题
输入模式可以不用配置速度,但是输出模式必须确定最大输出频率.当STM32的GPIO端口设置为输出模式时,有三种速度可以选择:2MHz.10MHz和50MHz,这个速度是指I/O口驱动电路的速度,是用来 ...
- 常用几种Java Web容器
Web服务器是运行及发布Web应用的容器,只有将开发的Web项目放置到该容器中,才能使网络中的所有用户通过浏览器进行访问.开发Java Web应用所采用的服务器主要是与JSP/Servlet兼容的We ...
- CodeForces 703D Mishka and Interesting sum
异或运算性质,离线操作,区间求异或和. 直接求区间出现偶数次数的异或和并不好算,需要计算反面. 首先,很容易求解区间异或和,记为$P$. 例如下面这个序列,$P = A[1]xorA[2]xorA[3 ...
- loadrunner 计数器
http://wenku.baidu.com/link?url=oN2kBiABHE1xJmbmZdOmlTCz0sJ8aL3i-hVGiBjAtw-epUW7qrk4f2mAqdOeK5xXw8Sk ...
- 数据库DateTime类型为空的处理
一,写一个辅助类,将该方法设为静态,先装换为object,在转为DateTime,返回DateTime public class DateTimeHelper { public static Date ...