繁体   English   中英

OpenCV车牌图像分割

[英]Opencv Image segmentation for licence plate

我正在做一个将读取车牌的项目,我的计划是

  1. 将图像转换为灰度以获得更好的性能
  2. 使用直方图均衡器带出车牌字符
  3. 模糊图像以去除一些杂点
  4. 使用自适应阈值对图像进行二值化
  5. 使用打开和关闭形态
  6. 检测车牌的矩形边框

好吧,问题是:我的代码不是很好,结果很糟糕,我无法检测到矩形,下面是我的代码:

Imgproc.cvtColor(image, image, Imgproc.COLOR_BGR2GRAY, 0);
    Imgproc.blur(image, image, new Size(3, 3));
    Imgproc.equalizeHist(image, image);
    Mat openElem = Imgproc.getStructuringElement(Imgproc.MORPH_RECT, new Size(1, 1));
    Mat closeElem = Imgproc.getStructuringElement(Imgproc.MORPH_RECT, new Size(1, 1));
    Imgproc.adaptiveThreshold(image, image, 225, Imgproc.ADAPTIVE_THRESH_GAUSSIAN_C, Imgproc.THRESH_BINARY_INV, 11, 2);

输入图像:

输入图像

输出图像:

输出图像

如果有经验的人可以帮助我,我将不胜感激

首先,最好是检测图像中印版的位置,只需执行以下步骤:

  1. 转换为灰色

    cvCvtColor(image,grayScale,CV_BGR2GRAY);

在此处输入图片说明

  1. 做索贝尔

    Mat sobel =新Mat(grayScale.size(),CvType.CV_16S); cvSobel(grayScale,sobel,2,0,7); Mat temp =新Mat(sobel.size(),CvType.CV_8UC1); convertScaleAbs(sobel,temp,0.00390625,0);

在此处输入图片说明

  1. 阈值

    cvThreshold(sobel,threshold,0,255,CV_THRESH_BINARY | CV_THRESH_OTSU); 在此处输入图片说明

  2. 做形态

    Mat kernal = cvCreateStructuringElementEx(3,1,1,0,CV_SHAPE_RECT); cvDilate(阈值,erode_dilate,kernal,2); // X vErode(erode_dilate,erode_dilate,kernal,4); // X cvDilate(erode_dilate,erode_dilate,kernal,2); // X

    kernal = cvCreateStructuringElementEx(1,3,0,1,CV_SHAPE_RECT); cvErode(erode_dilate,erode_dilate,kernal,1); // Y cvDilate(erode_dilate,erode_dilate,kernal,2);

在此处输入图片说明

  1. 现在您可以检测图像中的矩形:

在此处输入图片说明

  1. 然后您可以处理用于OCR的印版

希望对您有帮助!

好,这就是我想出的

Imgproc.cvtColor(image, image, Imgproc.COLOR_BGR2GRAY, 0);
    originalFrameGrayScale = image.clone();

    Mat morph = Imgproc.getStructuringElement(Imgproc.MORPH_RECT, new Size(9, 3));
    Imgproc.morphologyEx(image, image, Imgproc.MORPH_TOPHAT, morph);
    Imgproc.Sobel(image, image, -1, 2, 0);
    Imgproc.GaussianBlur(image, image, new Size(5,5), 3,3);
    Imgproc.morphologyEx(image, image, Imgproc.MORPH_CLOSE, morph);
    Imgproc.threshold(image, image, 200, 255, Imgproc.THRESH_OTSU);
    Vector<Rect> rectangles = detectionContour(image);

并找到高度,宽度和面积与某些值匹配的最大轮廓, 在此处输入图像描述

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM