欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java使用opencv識別二維碼的完整步驟

 更新時間:2021年09月14日 11:00:37   作者:帥帥兔子  
OpenMV是一個開源,低成本,功能強大的機器視覺模塊,下面這篇文章主要給大家介紹了關(guān)于Java使用opencv識別二維碼的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考下

前言

OpenCV的全稱是Open Source Computer Vision Library,它是一個跨平臺的計算機視覺庫,由英特爾公司發(fā)起并參與開發(fā),以BSD許可證授權(quán)發(fā)行,可以在商業(yè)和研究領(lǐng)域中免費使用。OpenCV本身由C++語言開發(fā),但也具有各種其他語言的接口,并支持windows、linux、ios、android等各種操作系統(tǒng)。本文將介紹如何使用OpenCV與Java語言進(jìn)行二維碼識別。

OpenCV的安裝

目前OpenCV最新的版本是4.5.2,根據(jù)所在平臺不同,OpenCV有多種安裝方式??梢韵螺d編譯好的包,也可以編譯安裝。這里我們介紹一下如何在Mac系統(tǒng)通過homebrew編譯安裝支持Java的OpenCV。其他系統(tǒng)的安裝方式請自行在搜索相關(guān)文章。

     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包和庫文件會出現(xiàn)在 /usr/local/homebrew/Cellar/opencv/4.5.2/share/java/opencv4 目錄。(M1芯片的mac會出現(xiàn)在/opt/homebrew/Cellar/opencv/4.5.2/share/java/opencv4下)

開發(fā)環(huán)境配置

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

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

將java.library.path設(shè)置為編譯出來的opencv動態(tài)鏈接庫的地址

識別二維碼

首先加載Opencv對應(yīng)的library

System.loadLibrary(Core.NATIVE_LIBRARY_NAME);

OpenCV的二維碼識別有兩個方案,一個是使用org.opencv.objdetect.QRCodeDetector, 另一個是使用微信貢獻(xiàn)的二維碼識別算法org.opencv.wechat_qrcode.WeChatQRCode。微信的二維碼識別類無論在準(zhǔn)確度和識別成功率上都大大超過了opencv的QRCodeDetector,并且使用起來也非常簡單,所以今天我們主要介紹微信包的二維碼識別。

首先我們通過Imgcodecs加載包含二維碼的圖像文件

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

然后初始化WeChatQRCode對象并識別二維碼

其中,detect.prototxt與detect.caffemodel文件是檢測的DNN的模型文件和參數(shù)文件,不傳這兩個文件也可以解析一些二維碼,但是最后的返回值無法定位準(zhǔn)確的二維碼在圖像中的坐標(biāo),只能顯示整個圖像的完整大小。sr.prototxt, sr.caffemodel文件是超分辨率圖像增強的DNN模型文件和參數(shù)文件,可以幫助分析定位大圖片中的比較小的二維碼。以上四個文件都可以在這里下載:https://github.com/WeChatCV/opencv_3rdparty/

這里最關(guān)鍵的代碼是detector.detectAndDecode(),他接收兩個參數(shù),第一個參數(shù)是圖像的Mat對象(彩色或灰度皆可),第二個參數(shù)是返回參數(shù),會將定位到的二維碼所在范圍的坐標(biāo)放在這個列表里面。列表的長度代表了識別到了幾個二維碼,每個列表對象是一個4*2*1的矩陣Mat對象,矩陣每一行代表了圖片上的一個坐標(biāo),第一列是x坐標(biāo)值,第二列是y坐標(biāo)值。函數(shù)的返回值是一個字符串列表。列表的長度和第二個參數(shù)列表相等,里面存放了每個二維碼解析后的字符串

有了坐標(biāo)數(shù)組我們就可以很方便的把二維碼區(qū)域在圖像中標(biāo)記出來,例如:

if (results.size() > 0) {
    System.out.println("識別到的二維碼個數(shù)為: " + results.size());
    for (var resultStr : results) {
        System.out.println(“識別到的二維碼內(nèi)容為:" + 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("未識別到二維碼.");
};

 結(jié)果示例如下:

 

通過上面這么些代碼就能讓我們擁有微信類似的二維碼識別能力,是不是覺得很簡單呢?

總結(jié)

到此這篇關(guān)于Java使用opencv識別二維碼的文章就介紹到這了,更多相關(guān)Java用opencv識別二維碼內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • java常用工具類 Reflect反射工具類、String字符串工具類

    java常用工具類 Reflect反射工具類、String字符串工具類

    這篇文章主要為大家詳細(xì)介紹了java常用工具類,包括Reflect反射工具類、String字符串工具類,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-05-05
  • Java多線程場景解析volatile和AtomicLong區(qū)別原理

    Java多線程場景解析volatile和AtomicLong區(qū)別原理

    這篇文章主要為大家介紹了Java中volatile和AtomicLong的區(qū)別原理示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-09-09
  • java、android可用的rtp封包解包h264案例

    java、android可用的rtp封包解包h264案例

    這篇文章主要介紹了java、android可用的rtp封包解包h264案例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-10-10
  • Springboot啟動執(zhí)行特定代碼的方式匯總

    Springboot啟動執(zhí)行特定代碼的方式匯總

    這篇文章主要介紹了Springboot啟動執(zhí)行特定代碼的幾種方式,本文通過實例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-12-12
  • Java中內(nèi)存問題之OOM詳解

    Java中內(nèi)存問題之OOM詳解

    這篇文章主要介紹了Java中內(nèi)存管理的OOM詳解,OOM,全稱“Out?Of?Memory”,翻譯成中文就是“內(nèi)存用完了”,來源于java.lang.OutOfMemoryError,當(dāng)JVM因為沒有足夠的內(nèi)存來為對象分配空間并且垃圾回收器也已經(jīng)沒有空間可回收時,就會拋出這個error,需要的朋友可以參考下
    2023-08-08
  • Spring profile通過多種方法實現(xiàn)多環(huán)境支持

    Spring profile通過多種方法實現(xiàn)多環(huán)境支持

    這篇文章主要介紹了Spring profile通過多種方法實現(xiàn)多環(huán)境支持,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-10-10
  • IntelliJ IDEA使用tomcat和jetty配置詳解

    IntelliJ IDEA使用tomcat和jetty配置詳解

    這篇文章主要介紹了IntelliJ IDEA使用tomcat和jetty配置詳解,以便進(jìn)一步地開發(fā)和調(diào)試,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-10-10
  • SpringBoot2.0整合Shiro框架實現(xiàn)用戶權(quán)限管理的示例

    SpringBoot2.0整合Shiro框架實現(xiàn)用戶權(quán)限管理的示例

    這篇文章主要介紹了SpringBoot2.0整合Shiro框架實現(xiàn)用戶權(quán)限管理的示例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-08-08
  • Spring?Security實現(xiàn)添加圖片驗證功能

    Spring?Security實現(xiàn)添加圖片驗證功能

    這篇文章主要為大家介紹了Spring?Security實現(xiàn)添加圖片驗證功能詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-01-01
  • Spring集成Web環(huán)境與SpringMVC組件的擴(kuò)展使用詳解

    Spring集成Web環(huán)境與SpringMVC組件的擴(kuò)展使用詳解

    這篇文章主要介紹了Spring集成Web環(huán)境與SpringMVC組件,它是一個MVC架構(gòu),用來簡化基于MVC架構(gòu)的Web應(yīng)用開發(fā)。SpringMVC最重要的就是五大組件
    2022-08-08

最新評論