http://blog.csdn.net/superdont/article/details/24935383

2014-05-03 21:38 6786人阅读 评论(2) 收藏 举报
 分类:
opencv(24) 

版权声明:本文为博主原创文章,未经博主允许不得转载。

采用OpenCV249利用边缘检测、轮廓检测、腐蚀实现的车牌定位,具体为:

  1. Mat srcImage=imread("image/000.jpg");
  2. //imshow("a",srcImage);
  3. int i,j;
  4. int cPointR,cPointG,cPointB,cPoint;//currentPoint;
  5. Mat resizeImage;
  6. resize(srcImage,resizeImage,Size(400,300));
  7. Mat grayImage;
  8. cvtColor(resizeImage,grayImage, CV_BGR2GRAY);
  9. Mat medianImage;
  10. medianBlur(grayImage,medianImage,3); //最后一个参数需要为奇数
  11. Mat sobelImage;
  12. //参数为:源图像,结果图像,图像深度,x方向阶数,y方向阶数,核的大小,尺度因子,增加的值
  13. Sobel(medianImage,sobelImage,CV_8U,1,0,3,0.4,128);
  14. Mat normalizeImage;
  15. normalize(sobelImage,normalizeImage,255,0,CV_MINMAX);
  16. Mat binaryImage;
  17. threshold(normalizeImage,binaryImage, 100, 255, THRESH_BINARY_INV );
  18. Mat closeImage;
  19. //morphologyEx(binaryImage,closeImage,MORPH_CLOSE,Mat(3,1,CV_8U),Point(0,0),10);  //闭运算
  20. Mat openImage(closeImage.rows,closeImage.cols,CV_8UC1);
  21. //morphologyEx(closeImage,openImage,MORPH_OPEN,Mat(3,3,CV_8U),Point(0,0),1);   //开运算
  22. //  erode(openImage,openImage,Mat(3,3,CV_8U),Point(-1,-1),10);
  23. dilate(binaryImage,openImage,Mat(3,3,CV_8U),Point(-1,-1),6);
  24. /*
  25. Mat rgbImage;
  26. cvtColor(openImage,rgbImage, CV_GRAY2BGR);
  27. */
  28. //cvtColor(openImage,openImage, CV_BGR2GRAY);
  29. //vector<vector<Point> > contours;
  30. //vector<Vec4i> hierarchy;
  31. //openImage=imread("test.png");
  32. imshow("openImage",openImage);
  33. /// Detect edges using canny
  34. //  Canny( src_gray, canny_output, thresh, thresh*2, 3 );
  35. /// Find contours
  36. /*  Mat thresholdImage;
  37. cvtColor(openImage,openImage, CV_BGR2GRAY);
  38. threshold( openImage,thresholdImage,127, 255, THRESH_BINARY );
  39. openImage=thresholdImage;*/
  40. vector<vector<Point> > contours;
  41. vector<Vec4i> hierarchy;
  42. findContours(openImage, contours, hierarchy, CV_RETR_EXTERNAL, CV_CHAIN_APPROX_SIMPLE, Point(0, 0) );
  43. Scalar color = Scalar( rng.uniform(0, 255), rng.uniform(0,255), rng.uniform(0,255) );
  44. for( int i = 0; i < contours.size(); i++ )
  45. {
  46. //使用边界框的方式
  47. CvRect aRect =  boundingRect(contours[i]);
  48. int tmparea=aRect.height*aRect.height;
  49. if (((double)aRect.width/(double)aRect.height>2)&& ((double)aRect.width/(double)aRect.height<6)&& tmparea>=200&&tmparea<=25000)
  50. {
  51. rectangle(resizeImage,cvPoint(aRect.x,aRect.y),cvPoint(aRect.x+aRect.width ,aRect.y+aRect.height),color,2);
  52. //cvDrawContours( dst, contours, color, color, -1, 1, 8 );
  53. }
  54. }
  55. imshow("contour",resizeImage);

效果一般,部分测试图像:

测试了很多图片,这几张基本有个样子,通过调整腐蚀的次数,可以针对不同的图像进行定位。

参考资料:

学习OpenCV——车牌检测(定位):http://blog.csdn.net/yangtrees/article/details/7444470

OpenCV使用边缘提取、腐蚀、轮廓进行车牌定位的更多相关文章

  1. 车牌定位与畸变校正(python3.7,opencv4.0)

    一.前言及思路简析 目前车牌识别系统在各小区门口随处可见,识别效果貌似都还可以.查阅资料后,发现整个过程又可以细化为车牌定位.畸变校正.车牌分割和内容识别四部分.本篇随笔主要介绍车牌定位及畸变校正两部 ...

  2. EasyPR--开发详解(2)车牌定位

    这篇文章是一个系列中的第三篇.前两篇的地址贴下:介绍.详解1.我撰写这系列文章的目的是:1.普及车牌识别中相关的技术与知识点:2.帮助开发者了解EasyPR的实现细节:3.增进沟通. EasyPR的项 ...

  3. EasyPR源码剖析(4):车牌定位之Sobel算子定位

    一.简介 sobel算子主要是用于获得数字图像的一阶梯度,常见的应用是边缘检测. Ⅰ.水平变化: 将 I 与一个奇数大小的内核进行卷积.比如,当内核大小为3时, 的计算结果为: Ⅱ.垂直变化: 将: ...

  4. 车牌识别LPR(四)-- 车牌定位

    第四篇:车牌定位 车牌定位就是采用一系列图像处理或者数学的方法从一幅图像中将车牌准确地定位出来.车牌定位提取出的车牌是整个车牌识别系统的数据来源,它的效果的好坏直接影响到整个系统的表现,只有准确地定位 ...

  5. EasyPR源码剖析(2):车牌定位

    上一篇主要介绍了车牌识别的整体框架和流程,车牌识别主要划分为了两个过程:即车牌检测和字符识别,而车牌识别的核心环节就是这一节主要介绍的车牌定位,即 Plate Locate.车牌定位主要是将图片中有可 ...

  6. 基于matlab的蓝色车牌定位与识别---识别

    接着昨天的工作,把最后一部分识别讲完. 关于字符识别这块,一种最省事的办法是匹配识别,将所得的字符和自己的标准字符库相减,计算所得结果,值最小的即为识别的结果.不过这种方法是在所得字符较为标准的情况, ...

  7. 【原】基于matlab的蓝色车牌定位与识别---绪论

    本着对车牌比较感兴趣,自己在课余时间摸索关于车牌的定位与识别,现将自己所做的一些内容整理下,也方便和大家交流. 考虑到车牌的定位涉及到许多外界的因素,因此有必要对车牌照的获取条件进行一些限定: 一.大 ...

  8. python-opencv实现简单的车牌定位

    车牌定位的原理:https://blog.csdn.net/relocy/article/details/78705662 训练好的分类器:https://github.com/zeusees/Hyp ...

  9. OpenCV函数:提取轮廓相关函数使用方法

    opencv中提供findContours()函数来寻找图像中物体的轮廓,并结合drawContours()函数将找到的轮廓绘制出.首先看一下findContours(),opencv中提供了两种定义 ...

随机推荐

  1. C#语言之“String.Split”的使用【转】

    String.Split 方法有6个重载函数: 1) public string[] Split(params char[] separator) 2) public string[] Split(c ...

  2. recycleview

    RecyclerView是什么? RecyclerView是一种新的视图组,目标是为任何基于适配器的视图提供相似的渲染方式.它被作为ListView和GridView控件的继承者,在最新的suppor ...

  3. Linux终端快捷操作汇总

    定位单词 在长段的命令中,使用 Ctrl + ← 和 Ctrl + → 可快速将光标定位到命令中单词的首字母或末尾,实现在各单词之间的快速跳动定位. 你可以试着在终端中输入 apt-get insta ...

  4. Entitlements (授权机制) 延伸

    授权机制 (Entitlements) 到目前为止,我们都假设所有的证书起到的作用都是一样的,并且假设如果我们有了一个有效的证书代码签名也就相应的有效.然而这当然不是唯一的规则.操作系统有许多标准来检 ...

  5. hello world2

    GTD就是Getting Things Done的缩写,翻译过来就是"把事情做完",GTD的核心理念概括就是必须记录下来要做的事,然后整理安排并使自己一一去执行.GTD的五个核心原 ...

  6. C#使用LitJson解析JSON(转)

    JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式.它基于JavaScript(Standard ECMA-262 3rd Edition - Decembe ...

  7. JqGrid相关操作

    JqGrid相关操作 根据jqGrid的文档,要想生成一个jqGrid,最直接的方法就是:$("#grid_id").jqGrid(options);也就是通过选择符得到一个tab ...

  8. Zookeeper理解

    ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,它包含一个简单的原语集,分布式应用程序可以基于它实现同步服务,配置维护和命名服务等.Zookeeper是hadoop的一个子项目,其 ...

  9. Spring 后置处理器 PropertyPlaceholderConfigurer 类(引用外部文件)

    一.PropertyPlaceholderConfigurer类的作用 PropertyPlaceholderConfigurer 是 BeanFactory 后置处理器的实现,也是 BeanFact ...

  10. 第六十三节,html表格元素

    html表格元素 学习要点:     1.表格元素总汇     2.构建表格解析     本章主要探讨HTML5中表格元素的用法.表格的主要用途是以网格的形式显示二维数据. 一.表格元素总汇     ...