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中提供了两种定义 ...
随机推荐
- C++中int转为char 以及int 转为string和string 转int和空格分隔字符串
1.对于int 转为char 直接上代码: 正确做法: void toChar(int b) { char u; ]; _itoa( b, buffer, ); //正确解法一 u = buffer[ ...
- SPA UI-router
------------------------------------------------------------------------------------ SPA SPA(单页面应用): ...
- JAVA中数组总结(课堂总结)
数组的特点: Arrays(数组)一种简单的数据结构元素具有相同的数据类型一旦创建之后,尺寸保持不变元素在内存中连续分布例子一:按引用与按值传递的示例源代码: // PassArray.java // ...
- 基于TCP协议的网络编程
TCP通信协议是一种可靠的传输层协议,它在通信的两端各建立一个Socket,从而在通信的两端之间形成虚拟网络链路.一旦建立了虚拟的网络链路,两端的程序就可以通过虚拟链路进行通信.Java使用Socke ...
- String.IsNullOrEmpty()和String.IsNullOrWhiteSpace()的区别
string.IsNullOrEmpty 这个是判断字符串是否为:null或者string.Empty或者“”,但不包含空格 .如果是如"\t"或者“ ” 这样的字符就返回fa ...
- 《Mastering Opencv ...读书笔记系列》车牌识别(I)
http://blog.csdn.net/jinshengtao/article/details/17883075/ <Mastering Opencv ...读书笔记系列>车牌识别(I ...
- hdu_5831_Rikka with Parenthesis II(模拟)
题目链接:hdu_5831_Rikka with Parenthesis II 题意: 给你一些括号的排列,必须交换一次,能不能将全部的括号匹配 题解: 模拟一下括号的匹配就行了,注意要特判只有一对括 ...
- 7、Web应用程序中的安全向量 -- 使用Retail部署配置
该方法不需要胡乱地编辑各个配置设置,而是利用了ASP.NET特性:Retail部署配置. 部署配置是服务器的machine.config文件(在%windir%\Microsoft.NET\Frame ...
- C++primer第三章标准库类型
除第二章介绍的基本数据类型外,C++ 还定义了一个内容丰富的抽象数据类型标准库. 本章将介绍标准库中的 vector.string 和 bitset 类型. string 类型支持长度可变的字符串 v ...
- 五笔拼音反查精灵 v6.69 绿色版
软件名称:五笔拼音反查精灵 v6.69 绿色版软件语言: 简体中文授权方式: 免费软件应用平台: Win7 / Vista / Win2003 / WinXP / Win2008 软件大小: 197K ...