#include "opencv2/highgui/highgui.hpp"

#include "opencv2/features2d/features2d.hpp"

#include "opencv2/imgproc/imgproc.hpp"

#include

// Mser车牌目标检测

std::vector<:rect> mserGetPlate(cv::Mat srcImage)

{

// HSV空间转换

cv::Mat gray, gray_neg;

cv::Mat hsi;

cv::cvtColor(srcImage, hsi, CV_BGR2HSV);

// 通道分离

std::vector<:mat> channels;

cv::split(hsi, channels);

// 提取h通道

gray = channels[1];

// 灰度转换

cv::cvtColor(srcImage, gray, CV_BGR2GRAY);

// 取反值灰度

gray_neg = 255 - gray;

std::vector<:vector> > regContours;

std::vector<:vector> > charContours;

// MSER+操作

cv::MSER(2, 10, 5000, 0.5, 0.3)(gray, regContours);

// MSER-操作

cv::MSER(2, 2, 400, 0.1, 0.3)(gray_neg, charContours);

cv::Mat mserMapMat =

cv::Mat::zeros(srcImage.size(), CV_8UC1);

cv::Mat mserNegMapMat =

cv::Mat::zeros(srcImage.size(), CV_8UC1);

// MSER+ 检测

for(int i = (int)regContours.size()-1; i >= 0; i--)

{

// 根据检测区域点生成mser+结果

const std::vector<:point>& r = regContours[i];

for (int j = 0; j < (int)r.size(); j++ )

{

cv::Point pt = r[j];

mserMapMat.at(pt) = 255;

}

}

// MSER- 检测

for(int i = (int)charContours.size()-1; i >= 0; i--)

{

// 根据检测区域点生成mser-结果

const std::vector<:point>& r = charContours[i];

for (int j = 0; j < (int)r.size(); j++ )

{

cv::Point pt = r[j];

mserNegMapMat.at(pt) = 255;

}

}

// mser结果输出

cv::Mat mserResMat;

// mser+与mser-位与操作

mserResMat= mserMapMat & mserNegMapMat;

cv::imshow("mserMapMat", mserMapMat);

cv::imshow("mserNegMapMat", mserNegMapMat);

cv::imshow("mserResMat", mserResMat);

// 闭操作连接缝隙

cv::Mat mserClosedMat;

cv::morphologyEx(mserResMat, mserClosedMat,

cv::MORPH_CLOSE, cv::Mat::ones(1, 20, CV_8UC1));

cv::imshow("mserClosedMat", mserClosedMat);

// 寻找外部轮廓

std::vector<:vector> > plate_contours;

cv::findContours(mserClosedMat, plate_contours,

CV_RETR_EXTERNAL,

CV_CHAIN_APPROX_SIMPLE, cv::Point(0, 0));

// 候选车牌区域判断输出

std::vector<:rect> candidates;

for (size_t i = 0; i != plate_contours.size(); ++i)

{

// 求解最小外界矩形

cv::Rect rect = cv::boundingRect(plate_contours[i]);

// 宽高比例

double wh_ratio = rect.width / double(rect.height);

// 不符合尺寸条件判断

if (rect.height > 20 && wh_ratio > 4 && wh_ratio < 7)

candidates.push_back(rect);

}

return candidates;

}

int main()

{

cv::Mat srcImage =

cv::imread("car.jpg");

if(srcImage .empty())

return-1;

// 候选车牌区域检测

std::vector<:rect> candidates;

candidates = mserGetPlate(srcImage);

// 车牌区域显示

for (int i = 0; i < candidates.size(); ++i) {

cv::imshow("rect", srcImage(candidates[i]));

cv::waitKey();

}

return 0;

}

原图

效果图

http://lib.csdn.NET/base/OpenCV

java opencv 提取车牌_opencv-车牌区域提取相关推荐

  1. opencv曝光算法_OpenCV特征点提取算法对比

    除了我们熟知的SIFT.SURF.ORB等特征点提取算法,OpenCV中还提供了十余种特征点提取算法.最近在整理以往的ppt和报告,看到其中一页ppt,发现已经忘得差不多了,就再写篇博客复习下好了,这 ...

  2. java opencv 物体检测_OpenCV.物体识别

    1.度娘:"OpenCV 物体识别" ZC:主看这个,讲的比较细致,操作一般都是使用的 OpenCV里面的exe,一些代码是 java的 可以搞定,最后一段测试代码 是Python ...

  3. java opencv 模板匹配算法_OpenCV探索之路(九):模板匹配

    模板匹配的作用在图像识别领域作用可大了.那什么是模板匹配? 模板匹配,就是在一幅图像中寻找另一幅模板图像最匹配(也就是最相似)的部分的技术. 说的有点抽象,下面给个例子说明就很明白了. 在上面这幅全明 ...

  4. java opencv 相似度_opencv使用 java 对比两个人脸的相似度

    1.创建Java工程,并导入如下jar包 opencv-440.jar 2.编写代码 import org.opencv.core.*; import org.opencv.imgcodecs.Img ...

  5. java opencv 阀值分割_opencv 阈值分割的具体使用

    阈值分割 像素图 原始图像像素图 见下面 红色线:标注一条阈值线 二进制阈值化 首先设定一条阀值线 如127 大于127的像素点灰度值设为最大(如unit8的格式为255) 小于127的像素点灰度值设 ...

  6. java opencv 调用摄像头_opencv C++实现调用摄像头动态识别人脸

    前言 #include #include #include #include #include #include #include #include #include #include using n ...

  7. 利用颜色和形态学两种方法进行车牌区域提取的OpenCV代码

    图像处理开发需求.图像处理接私活挣零花钱,请加微信/QQ 2487872782 图像处理开发资料.图像处理技术交流请加QQ群,群号 271891601 2016-7-28日:用MSER算法也实现了车牌 ...

  8. OpenCV(项目)车牌识别1 -- 车牌提取(形态学)

    目录 一.形态学车牌提取(简单:单情景) 1.读取图片,转灰度图 2.提取轮廓(Sobel算子提取y方向边缘) 3.自适应二值化 4.闭运算处理,把图像闭合.揉团,使图像区域化 5.腐蚀/膨胀去噪得到 ...

  9. 车牌区域提取(定位)综述及各种算法的优缺点

    车牌区域提取通常也称为车牌区域定位,其目的是从含有车牌的图像中找到车牌区域. 车牌定位的重要性不言而喻,作为车牌识别的第一个步骤,车牌区域的提取成功与否是完成车牌识别的基础也是首要决定因素. 车牌区域 ...

最新文章

  1. 收藏:存储知识全面总结
  2. 古风登陆html,再祭古风扬 文/凌霄一羽
  3. android原生接入rn,Android原生项目集成RN页面
  4. postman简单接口测试
  5. TypeScript 编译生成的 JavaScript 源代码里的 ɵcmp 属性
  6. Java迭代器修改链表_Java恼人的迭代器不会返回链表中的元素
  7. 考博之前一定要明白:读博的硬道理
  8. python2 http请求post、get
  9. Java基础学习总结(79)——Java本地接口JNI详解
  10. 实战中的Agile开发
  11. Udp---模拟实现客户端与服务器通信
  12. python改背景颜色_Python Opencv 通过轨迹(跟踪)栏实现更改整张图像的背景颜色
  13. vue族谱架构_【Vue】谈Vue的依赖追踪系统 ——搞懂methods watch和compute的区别和联系...
  14. 游戏筑基之游戏菜单制作(C语言)
  15. docker容器运行jar
  16. 慧荣SM2258XT主控固态硬盘B05 B16 B17闪存开卡步骤
  17. 国科大学习资料--形式语言与自动机理论(姚刚)-2020期末考试题
  18. 数字证书及其认证过程
  19. Python中的图像增强
  20. vue-bilibili学习笔记

热门文章

  1. HTTP错误 403.14 - Forbidden 错误的解决方法
  2. 异常处理:request processing failed java.uitl. regex .Pattern Syntax Exception:Dangling meta character “
  3. java简单学生考勤源代码_这是一个简单的学生考勤管理系统
  4. Webug4.0-XSS
  5. 2022年初级会计考试经典试题及答案
  6. linux 终端给进程输入法,Linux 输入法设置
  7. php rename函数_php使用rename()函数移动文件
  8. 继承连接关系的四叉树地图
  9. Qt embeded 4.5.3 在ARM-Linux的移植
  10. Java代码模块化-方法method