Android使用OpenCV实现车牌检测,你学会了吗?
创始人
2025-07-12 00:11:52
0

OpenCV(Open Source Computer Vision Library)是一个基于Apache2.0许可(开源)发行的跨平台计算机视觉和机器学习软件库,可以运行在Linux、Windows、Android和Mac OS操作系统上。它轻量级而且高效——由一系列C函数和少量C++类构成,同时提供了Python、Ruby、MATLAB等语言的接口,实现了图像处理和计算机视觉方面的很多通用算法。

OpenCV用C++语言编写,它具有C++,Python,Java和MATLAB接口,并支持Windows,Linux,Android和Mac OS,OpenCV主要倾向于实时视觉应用,并在可用时利用MMX和SSE指令。

OpenCV可用于开发实时的图像处理、计算机视觉以及模式识别程序,该程序库也可以使用英特尔公司的IPP进行加速处理。OpenCV的应用领域包括机器人视觉、模式识别、机器学习、工厂自动化生产线产品检测、医学影像、摄像机标定、遥感图像等。

现在,汽车的踪影无处不在,公路上疾驰,大街边临停,小区中停靠,车库里停泊。所以车牌识别成为了焦点,而车牌检测是车牌识别的基础和前提。

初始化OpenCV

//初始化OpenCV
boolean initState = OpenCVLoader.initLocal();
Log.d(TAG, "onCreate: OpenCV初始化" + initState)

初始化检测器CascadeClassifier和执行车牌检测

public Bitmap recognizePlateNumber(Bitmap bitmap) {
    Mat imageMat = new Mat();
    
    Utils.bitmapToMat(bitmap, imageMat); 
    
    CascadeClassifier classifier = new CascadeClassifier();
    try {
        InputStream is = getAssets().open("haarcascade_russian_plate_number.xml");
        classifier.load(is);
        
        RectVector plates = new RectVector();
        classifier.detectMultiScale(imageMat, plates); 
        
        int numOfPlates = plates.size();
        StringBuilder resultBuilder = new StringBuilder();
        
        for (int i = 0; i < numOfPlates; ++i) {
            Rect rect = plates.get(i).clone();
            
            Imgproc.rectangle(imageMat, new Point(rect.tl()), new Point(rect.br()), new Scalar(0, 255, 0), 2); 
        }
        Utils.matToBitmap(imageMat, bitmap);
        return bitmap;
    } catch (IOException e) {
        e.printStackTrace();
    } finally {
        classifier.close();
    }
    
    return null;
}

最终结果:

图片图片

目前只实现了图像中车牌区域检测,接下来文章我们再继续研究车牌文字识别。

相关内容

热门资讯

如何允许远程连接到MySQL数... [[277004]]【51CTO.com快译】默认情况下,MySQL服务器仅侦听来自localhos...
如何利用交换机和端口设置来管理... 在网络管理中,总是有些人让管理员头疼。下面我们就将介绍一下一个网管员利用交换机以及端口设置等来进行D...
各种千兆交换机的数据接口类型详... 千兆交换机有很多值得学习的地方,这里我们主要介绍各种千兆交换机的数据接口类型,作为局域网的主要连接设...
施耐德电气数据中心整体解决方案... 近日,全球能效管理专家施耐德电气正式启动大型体验活动“能效中国行——2012卡车巡展”,作为该活动的...
Windows恶意软件20年“... 在Windows的早期年代,病毒游走于系统之间,偶尔删除文件(但被删除的文件几乎都是可恢复的),并弹...
范例解读VB.NET获取环境变... VB.NET编程语言的使用范围非常广泛,可以帮助开发人员处理各种程序中的需求,而且还能对移动设备进行...
规避非法攻击 用好路由器远程管... 单位在市区不同位置设立了科技服务点,每一个服务点的员工都通过宽带路由器进行共享上网,和单位网络保持联...
20个非常棒的扁平设计免费资源 Apple设备的平面图标PSD免费平板UI 平板UI套件24平图标Freen平板UI套件PSD径向平...