最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java使用opencv識(shí)別二維碼的完整步驟

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

前言

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

OpenCV的安裝

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

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

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

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

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

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

識(shí)別二維碼

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

System.loadLibrary(Core.NATIVE_LIBRARY_NAME);

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

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

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

然后初始化WeChatQRCode對(duì)象并識(shí)別二維碼

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

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

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

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

 結(jié)果示例如下:

 

通過(guò)上面這么些代碼就能讓我們擁有微信類似的二維碼識(shí)別能力,是不是覺(jué)得很簡(jiǎn)單呢?

總結(jié)

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

相關(guān)文章

  • Java實(shí)現(xiàn)發(fā)送郵件并攜帶附件

    Java實(shí)現(xiàn)發(fā)送郵件并攜帶附件

    這篇文章主要為大家詳細(xì)介紹了Java實(shí)現(xiàn)發(fā)送郵件并攜帶附件,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-09-09
  • Java三個(gè)類加載器及它們的相互關(guān)系

    Java三個(gè)類加載器及它們的相互關(guān)系

    Java在需要使用類別的時(shí)候,才會(huì)將類別加載,Java的類別載入是由類別載入器(Class loader)來(lái)達(dá)到的,預(yù)設(shè)上,在程序啟動(dòng)之后,主要會(huì)有三個(gè)類別加載器,文中詳細(xì)介紹了這三個(gè)類加載器,需要的朋友可以參考下
    2021-06-06
  • Java卡片布局管理器解釋及實(shí)例

    Java卡片布局管理器解釋及實(shí)例

    這篇文章主要介紹了Java卡片布局管理器解釋及實(shí)例,需要的朋友可以參考下。
    2017-09-09
  • Spring Security添加驗(yàn)證碼的兩種方式小結(jié)

    Spring Security添加驗(yàn)證碼的兩種方式小結(jié)

    使用spring security的時(shí)候,框架會(huì)幫我們做賬戶密碼的驗(yàn)證,但是如我們需要添加一個(gè)驗(yàn)證碼,就需要對(duì)配置文件進(jìn)行修改,這篇文章主要給大家介紹了關(guān)于Spring Security添加驗(yàn)證碼的兩種方式,需要的朋友可以參考下
    2021-10-10
  • Spring Boot事務(wù)配置詳解

    Spring Boot事務(wù)配置詳解

    這篇文章主要介紹了Spring Boot事務(wù)配置詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-01-01
  • Spring底層核心源碼原理解析

    Spring底層核心源碼原理解析

    這篇文章主要介紹了Spring底層核心源碼原理解析,當(dāng)在某個(gè)方法上加了@Transactional注解后,就表示該方法在調(diào)用時(shí)會(huì)開(kāi)啟Spring事務(wù),而這個(gè)方法所在的類所對(duì)應(yīng)的Bean對(duì)象會(huì)是該類的代理對(duì)象,需要的朋友可以參考下
    2023-09-09
  • 利用ssh實(shí)現(xiàn)服務(wù)器文件上傳下載

    利用ssh實(shí)現(xiàn)服務(wù)器文件上傳下載

    這篇文章主要為大家詳細(xì)介紹了如何利用ssh實(shí)現(xiàn)服務(wù)器文件上傳下載,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2016-09-09
  • IDEA中配置Python環(huán)境并運(yùn)行方式

    IDEA中配置Python環(huán)境并運(yùn)行方式

    本文介紹了在Mac和Windows平臺(tái)上安裝Python環(huán)境的方法,并詳細(xì)講解了如何在IntelliJ IDEA中安裝Python插件、創(chuàng)建Python工程和運(yùn)行Python文件,同時(shí),還提到了一些常用的Python框架,如Django、Google App Engine和SQL支持
    2025-03-03
  • Java 中運(yùn)行字符串表達(dá)式的方法

    Java 中運(yùn)行字符串表達(dá)式的方法

    這篇文章主要介紹了Java 中運(yùn)行字符串表達(dá)式的方法,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2018-11-11
  • Springboot實(shí)現(xiàn)郵箱驗(yàn)證代碼實(shí)例

    Springboot實(shí)現(xiàn)郵箱驗(yàn)證代碼實(shí)例

    這篇文章主要介紹了Springboot實(shí)現(xiàn)郵箱驗(yàn)證代碼實(shí)例,在一些業(yè)務(wù)需求中我們經(jīng)常需要使用郵箱進(jìn)行驗(yàn)證碼的收取,本文通過(guò)簡(jiǎn)單的代碼實(shí)例來(lái)說(shuō)明,需要的朋友可以參考下
    2024-01-01

最新評(píng)論

子长县| 平塘县| 阿拉善左旗| 金山区| 许昌市| 洪泽县| 沧州市| 东兰县| 怀远县| 泸水县| 淅川县| 宁武县| 连城县| 桑日县| 平山县| 醴陵市| 台南市| 高邮市| 青阳县| 千阳县| 石景山区| 尉氏县| 庄河市| 南通市| 宜宾市| 弥勒县| 云林县| 巴中市| 扬州市| 宁蒗| 宁明县| 绥宁县| 鹿泉市| 九江县| 玉龙| 年辖:市辖区| 东乌珠穆沁旗| 凉城县| 达日县| 平湖市| 蕉岭县|