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中提供了两种定义 ...
随机推荐
- spring的校验框架 @Validated & BindingResult
controller上写法类似这样: @RequestMapping(value = "saleInfoList.json", method = RequestMethod.GET ...
- Redis集合相关命令
1.无序集合集合的特性:①确定性②互异性③无序性redis的set是string类型的无序集合set元素最大可以包含(2^32-1)个元素 sadd key value1....valueN 将将元素 ...
- Managed Switch: Confs
shortcuts: c-w: delete word before c-a: move to first char c-y: delete everything after cursor c-z: ...
- Struts2第四天
Struts2第四天 昨天: 自定义的拦截器:继续methodFilterInterceptor,可以指定哪些方法需要拦截或者不拦截. Intercepters(配置拦截器),intercepter( ...
- URAL 1525 Path
#include<stdio.h> #include<string.h> #include<math.h> #include<algorithm> us ...
- Flood-it!
Flood-it! 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4127/http://acm.split.hdu.edu.cn/showproble ...
- 两种为wangEditor添加拖拽调整高度的方式:CSS3和jQuery UI
wangEditor是一款优秀的Web富文本编辑器,但如果能像KindEditor那样支持拖拽调整高度就更好了.有两种方式可以为wangEditor添加这一功能,这里使用的wangEditor版本为2 ...
- Java、C#双语版配套AES加解密示例
这年头找个正经能用的东西那是真难,网上一搜索一大堆,正经能用的没几个,得,最后还是得靠自己,正巧遇上需要AES加解密的地方了,而且还是Java和C#间的相互加解密操作,这里做个备忘 这里采用的加解 ...
- PAT 团体程序设计天梯赛-练习集 L1-020. 帅到没朋友
原题 https://www.patest.cn/contests/gplt/L1-020 当芸芸众生忙着在朋友圈中发照片的时候,总有一些人因为太帅而没有朋友.本题就要求你找出那些帅到没有朋友的人. ...
- git config and options core.bare hard
In Lynda course Building a Web Interface with React.js 003 Using the exercises > git clone --bare ...