opencv android 车牌,OpenCV + Android +车牌号识别

我正在开发一款Android应用来检测车牌号码。我做了图像处理,找到了图像级别的图像。现在我需要将以下C ++代码转换为基于Opencv的Android java。

fa8421e13488bbc4ee8056ec098a373b.png

这是在Otsu阈值image之后

dcf73d8ef5dc48cc8f46c8b022281543.png

这是我的andoid + opencv代码(100%工作)

ImageView imgView = (ImageView) findViewById(R.id.imageView1);

Bitmap bmp = BitmapFactory.decodeResource(getResources(),car);

//First convert Bitmap to Mat

Mat ImageMatin = new Mat ( bmp.getHeight(), bmp.getWidth(), CvType.CV_8U, new Scalar(4));

Mat ImageMatout = new Mat ( bmp.getHeight(), bmp.getWidth(), CvType.CV_8U, new Scalar(4));

Mat ImageMatBk = new Mat ( bmp.getHeight(), bmp.getWidth(), CvType.CV_8U, new Scalar(4));

Mat ImageMatTopHat = new Mat ( bmp.getHeight(), bmp.getWidth(), CvType.CV_8U, new Scalar(4));

Mat temp = new Mat ( bmp.getHeight(), bmp.getWidth(), CvType.CV_8U, new Scalar(4));

Bitmap myBitmap32 = bmp.copy(Bitmap.Config.ARGB_8888, true);

Utils.bitmapToMat(myBitmap32, ImageMatin);

//Converting RGB to Gray.

Imgproc.cvtColor(ImageMatin, ImageMatBk, Imgproc.COLOR_RGB2GRAY,8);

Imgproc.dilate(ImageMatBk, temp, Imgproc.getStructuringElement(Imgproc.MORPH_RECT, new Size(9, 9)));

Imgproc.erode(temp, ImageMatTopHat, Imgproc.getStructuringElement(Imgproc.MORPH_RECT, new Size(9,9)));

//Core.absdiff(current, previous, difference);

Core.absdiff(ImageMatTopHat, ImageMatBk, ImageMatout);

//Sobel operator in horizontal direction.

Imgproc.Sobel(ImageMatout,ImageMatout,CvType.CV_8U,1,0,3,1,0.4,Imgproc.BORDER_DEFAULT);

//Converting GaussianBlur

Imgproc.GaussianBlur(ImageMatout, ImageMatout, new Size(5,5),2);

Imgproc.dilate(ImageMatout, ImageMatout, Imgproc.getStructuringElement(Imgproc.MORPH_RECT, new Size(3,3)));

Mat element = Imgproc.getStructuringElement(Imgproc.MORPH_RECT, new Size(17, 3));

Imgproc.morphologyEx(ImageMatout, ImageMatout, Imgproc.MORPH_CLOSE, element);

//threshold image

Imgproc.threshold(ImageMatout, ImageMatout, 0, 255, Imgproc.THRESH_OTSU+Imgproc.THRESH_BINARY);

现在我需要提取数字板

请帮我将以下C ++代码转换为java + opencv:。

std::vector rects;

std::vector<:vector>::iterator itc = contours.begin();

while (itc != contours.end())

{

cv::RotatedRect mr = cv::minAreaRect(cv::Mat(*itc));

float area = fabs(cv::contourArea(*itc));

float bbArea=mr.size.width * mr.size.height;

float ratio = area/bbArea;

if( (ratio < 0.45) || (bbArea < 400) ){

itc= contours.erase(itc);

}else{

++itc;

rects.push_back(mr);

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
伴随着我国社会经济水平的不断提升,物联网这一产业日益发挥着其巨大的影响力。作为其融入日常生活的前沿应用之一,智能交通给我们带来了前所未有的便利。车牌识别的技术研究一直是智能交通领域的热门方向,已经在固定终端平台上得到了全面的发展。而随着智能手机的逐渐普及,车牌识别系统的便携化、多功能化也将成为其下一步的发展趋势。 本文对车牌识别系统中的图像预处理、车牌定位、字符分割以及字符识别等相关操作过程进行了深入的探讨和研究,继而提出了一套完整的基于Android平台移动终端的车牌识别系统。相关主要内容如下: (1)车牌的预处理及定位 首先对我国车牌的特征作了细致的研究分析,为定位部分能够设定合理的阈值从而准确地定位提供了足够的先验知识基础。预处理阶段主要介绍了相应灰度处理以及二值化采用的方法。根据实际拍摄环境的影响会造成车牌图像光照不均匀和光线过暗等现象,本文提出了一种合理的改进方法,即在进行Otsu二值化处理之前加入基于离散余弦变换的光照补偿校正处理,实验证明能够很好的改善上述现象。在对常用的定位方法进行整理和分析之后,结合移动平台硬件限制的特点,本文提出了一种基于边缘检测和形态学处理结合投影分析的有效快速的定位方法。该方法通过sobel垂直算子对图像边缘进行检测,通过形态学一系列处理运算和合适的筛选将车牌连通区域分离出,达到初步定位的效果,最后结合水平和初值投影的分析,准确地于车牌上下左右边缘处进行切割,从而准确定位出车牌。最后,本文针对手机拍摄车牌照片时存在远近不一,拍摄的照片质量低影响定位效果的情况,实现了基于高斯尺度变换的改进方法。 (2)车牌字符的分割操作 该部分主要是对定位输出的车牌区域图像进行实际意义上的分析是否存在倾斜,根据结果决定是否进行相应的校正工作,然后再逐个分割该区域的众字符。这里本文使用的是一种根据相应字符的边界情况进行倾斜校正的方法,该方法通过提取字符边界划定连线,以计算车牌图像的倾斜角度,对于定位后车牌边框残缺不全的情况有很好的性能。最后,在分析常见的字符分割方法的优缺点基础上,本文研究了一种结合先验知识与垂直投影的字符分割处理方法,该方法通过初步分割与精确分割两步处理,能够达到准确分割七个车牌字符的目的,对字符粘连的现象也有很好的改进。 (3)车牌字符的识别 通过对常用字符识别算法的分析和比较,本文结合了模版匹配简单快速的特点,提出了一种基于使用改进的模版匹配进行字符识别的方法。通过给相应模版加高斯噪声的方法模拟现实拍摄环境中出现的照片模糊等现象,使用多模版进行匹配计算,提高了识别算法的鲁棒性,实验证明,该算法能够有效实时地识别出相应车牌的字符,可行性高。对于相似字符易于造成识别错误的情况,本文又针对相似字符进行差异区域扫描分析,并取得了良好的效果。 (4)基于Android平台的LPRS系统软件的设计 在对Android平台的基础知识以的探究之下,根据前几章所提出的一系列车牌识别的系统步骤,本章将其移植到移动终端上来,实现了一个基于Android平台的车牌识别系统,通过对软件进行了功能测试和分析证明了该系统的有效性,满足一定的实际应用需要。 本文设计完成的车牌识别系统应用于移动终端平台,应用环境有交通警察的日常执法如违章车辆信息的登记上传和非法车辆的稽查,路边人工停车的信息管理,普通市民对违章停车的举证和自助通知移车等,相对于传统固定终端的车牌识别系统节约了硬件成本,促进了物联网技术在智能交通中的发展。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值