我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Java使用opencv识别二维码的完整步骤

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Java使用opencv识别二维码的完整步骤

前言

OpenCV的全称是Open Source Computer Vision Library,它是一个跨平台的计算机视觉库,由英特尔公司发起并参与开发,以BSD许可证授权发行,可以在商业和研究领域中免费使用。OpenCV本身由C++语言开发,但也具有各种其他语言的接口,并支持windows、linux、ios、android等各种操作系统。本文将介绍如何使用OpenCV与Java语言进行二维码识别。

OpenCV的安装

目前OpenCV最新的版本是4.5.2,根据所在平台不同,OpenCV有多种安装方式。可以下载编译好的包,也可以编译安装。这里我们介绍一下如何在Mac系统通过homebrew编译安装支持Java的OpenCV。其他系统的安装方式请自行在搜索相关文章。

     1. 通过brew安装ant


brew install ant

    2. 修改opencv homebrew fomula。


brew edit opencv

找到 -DBUILD_opencv_java=OFF 这一行,并修改为 -DBUILD_opencv_java=ON 保存

    3. 安装openCV


brew install opencv --build-from-source

  编译安装完成后,java Jar包和库文件会出现在 /usr/local/homebrew/Cellar/opencv/4.5.2/share/java/opencv4 目录。(M1芯片的mac会出现在/opt/homebrew/Cellar/opencv/4.5.2/share/java/opencv4下)

开发环境配置

在您使用的IDE中,引入上述目录下的opencv-452.jar包。并且在启动命令后加上


-Djava.library.path=/usr/local/homebrew/Cellar/opencv/4.5.2/share/java/opencv4

将java.library.path设置为编译出来的opencv动态链接库的地址

识别二维码

首先加载Opencv对应的library


System.loadLibrary(Core.NATIVE_LIBRARY_NAME);

OpenCV的二维码识别有两个方案,一个是使用org.opencv.objdetect.QRCodeDetector, 另一个是使用微信贡献的二维码识别算法org.opencv.wechat_qrcode.WeChatQRCode。微信的二维码识别类无论在准确度和识别成功率上都大大超过了opencv的QRCodeDetector,并且使用起来也非常简单,所以今天我们主要介绍微信包的二维码识别。

首先我们通过Imgcodecs加载包含二维码的图像文件


var img = Imgcodecs.imread(file.getPath())

然后初始化WeChatQRCode对象并识别二维码

其中,detect.prototxt与detect.caffemodel文件是检测的DNN的模型文件和参数文件,不传这两个文件也可以解析一些二维码,但是最后的返回值无法定位准确的二维码在图像中的坐标,只能显示整个图像的完整大小。sr.prototxt, sr.caffemodel文件是超分辨率图像增强的DNN模型文件和参数文件,可以帮助分析定位大图片中的比较小的二维码。以上四个文件都可以在这里下载:https://github.com/WeChatCV/opencv_3rdparty/

这里最关键的代码是detector.detectAndDecode(),他接收两个参数,第一个参数是图像的Mat对象(彩色或灰度皆可),第二个参数是返回参数,会将定位到的二维码所在范围的坐标放在这个列表里面。列表的长度代表了识别到了几个二维码,每个列表对象是一个4*2*1的矩阵Mat对象,矩阵每一行代表了图片上的一个坐标,第一列是x坐标值,第二列是y坐标值。函数的返回值是一个字符串列表。列表的长度和第二个参数列表相等,里面存放了每个二维码解析后的字符串

有了坐标数组我们就可以很方便的把二维码区域在图像中标记出来,例如:


if (results.size() > 0) {
    System.out.println("识别到的二维码个数为: " + results.size());
    for (var resultStr : results) {
        System.out.println(“识别到的二维码内容为:" + resultStr);
    }
​
​
    for (var points : pointsOfRect ) {
        int noOfRows = points.rows();
        int noOfCols = points.cols();
        for (int row = 0; row < noOfRows; row++) {
            Imgproc.line(result, new Point(points.get(row, 0)[0], points.get(row, 1)[0]),
                    new Point(points.get((row + 1) % noOfRows, 0)[0], points.get((row + 1) % noOfRows, 1)[0]),
                    new Scalar(255, 0, 0), 3);
        }
    }
} else {
    System.out.println("未识别到二维码.");
};

 结果示例如下:

 

通过上面这么些代码就能让我们拥有微信类似的二维码识别能力,是不是觉得很简单呢?

总结

到此这篇关于Java使用opencv识别二维码的文章就介绍到这了,更多相关Java用opencv识别二维码内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Java使用opencv识别二维码的完整步骤

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Android上使用ZXing识别条形码与二维码的方法

目前有越来越多的手机具备自动对焦的拍摄功能,这也意味着这些手机可以具备条码扫描的功能。手机具备条码扫描的功能,可以优化购物流程,快速存储电子名片(二维码)等。 本文所述实例就使用了ZXing 1.6实现条码/二维码识别。ZXing是个很经典
2022-06-06

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录