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

java調(diào)用opencv身份證號識別詳解

 更新時間:2024年03月06日 10:36:08   作者:冒泡的肥皂  
這篇文章主要為大家詳細(xì)介紹了java如何調(diào)用opencv實(shí)現(xiàn)身份證號的識別,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下

一、實(shí)現(xiàn)思路

1.矯正圖片 這個可以參考上篇文章 Java調(diào)用opencv圖片矯正

2.因?yàn)樯矸葑C大小是固定的 這里可以按照比例截取身份證號的區(qū)域

3.把截取圖像用tess4j進(jìn)行識別

4.效果圖

二、部分代碼

2.1圖片剪輯

public static Mat cutRect(Mat image) {
Mat clone=image.clone();
Mat src=image.clone();

Imgproc.GaussianBlur(clone, clone, new Size(3, 3), 0, 0);
HighGui.imshow("GaussianBlur1", clone);

Imgproc.cvtColor(clone, clone,Imgproc.COLOR_BGR2GRAY);
HighGui.imshow("GRY1", clone);

int lowThresh=20;
//邊緣檢測
Imgproc.Canny(clone, clone,lowThresh, lowThresh*3,3);
HighGui.imshow("Canny1", clone);

List<MatOfPoint> contours = new ArrayList<MatOfPoint>();
Mat hierarchy = new Mat();

// 尋找輪廓
Imgproc.findContours(clone, contours, hierarchy, Imgproc.RETR_EXTERNAL, Imgproc.CHAIN_APPROX_NONE);
System.out.println("輪廓:"+contours.size());
// 找出匹配到的最大輪廓
double area = Imgproc.boundingRect(contours.get(0)).area();
int index = 0;

// 找出匹配到的最大輪廓
for (int i = 0; i < contours.size(); i++) {
    double tempArea = Imgproc.boundingRect(contours.get(i)).area();
    if (tempArea > area) {
        area = tempArea;
        index = i;
    }
}

MatOfPoint2f matOfPoint2f = new MatOfPoint2f(contours.get(index).toArray());

RotatedRect rect = Imgproc.minAreaRect(matOfPoint2f);

Mat temp = new Mat(src , rect.boundingRect());
Mat t = new Mat();
temp.copyTo(t);

HighGui.imshow("cut", temp);
return t;
}

2.2身份證提取位置

參考

public static String card(Mat mat){
    Point point1=new Point(mat.cols()*0.34,mat.rows()*0.80);
    Point point2=new Point(mat.cols()*0.34,mat.rows()*0.80);
    Point point3=new Point(mat.cols()*0.89,mat.rows()*0.91);
    Point point4=new Point(mat.cols()*0.89,mat.rows()*0.91);
    List<Point> list=new ArrayList<>();
    list.add(point1);
    list.add(point2);
    list.add(point3);
    list.add(point4);
    Mat card= shear(mat,list);
    card=ImageUtil.drawContours(card,50);
    HighGui.imshow("card", card); 
  //高斯濾波
  	Imgproc.cvtColor(card, card,Imgproc.COLOR_BGR2GRAY);
  	Imgproc.GaussianBlur(card, card, new Size(3, 3), 0, 0);
  	Imgproc.threshold(card, card, 165, 255, Imgproc.THRESH_BINARY);
	 //Imgproc.Canny(image, image,lowThresh, lowThresh*3,3);
    System.out.println(ImageUtil.getImageMessage(Mat2BufImg(card,".jpg"),"eng"));
    return null;
}

2.3圖片數(shù)字識別 tess4j

語言包的下載

pom

<dependency>
  <groupId>net.sourceforge.tess4j</groupId>
  <artifactId>tess4j</artifactId>
  <version>4.5.4</version>
</dependency>
public static String getImageMessage(BufferedImage img,String language){
    String result="";
    try{
        ITesseract instance = new Tesseract();
        instance.setTessVariable("user_defined_dpi", "300");
        //語言包的位置
        File tessDataFolder = new File("E:\\tessdata-master");
        instance.setLanguage(language);
        instance.setDatapath(tessDataFolder.getAbsolutePath());
        result = instance.doOCR(img);
        System.out.println(result);
    }catch(Exception e){
    	e.printStackTrace();
    }
    return result;
}

到此這篇關(guān)于java調(diào)用opencv身份證號識別詳解的文章就介紹到這了,更多相關(guān)java opencv身份證號識別內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 一文帶你輕松掌握EasyExcel的使用技巧

    一文帶你輕松掌握EasyExcel的使用技巧

    EasyExcel是一個基于Java的、快速、簡潔、解決大文件內(nèi)存溢出的Excel處理工具,這篇文章就來帶大家深入了解EasyExcel的使用技巧,需要的可以參考一下
    2023-06-06
  • Java中絕對值函數(shù)的介紹與其妙用

    Java中絕對值函數(shù)的介紹與其妙用

    這篇文章主要給大家介紹了Java中絕對值函數(shù)的介紹與其妙用,其中包括絕對值函數(shù)用來獲取表達(dá)式的絕對值和絕對值函數(shù)實(shí)現(xiàn)降序+升序輸出。文章末尾給出了實(shí)例介紹,有需要的朋友們可以參考學(xué)習(xí),下面來一起看看吧。
    2017-01-01
  • ClassLoader雙親委派模式作用詳解

    ClassLoader雙親委派模式作用詳解

    這篇文章主要為大家介紹了ClassLoader雙親委派模式作用詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-10-10
  • 數(shù)據(jù)庫基本操作語法歸納總結(jié)

    數(shù)據(jù)庫基本操作語法歸納總結(jié)

    本篇文章主要介紹了數(shù)據(jù)庫的一些常用方法及一些基本操作,需要的朋友可以參考下
    2017-04-04
  • 全面了解java異常

    全面了解java異常

    本文非常詳細(xì)的介紹了java異常,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們可以學(xué)習(xí)一下這篇文章
    2021-08-08
  • Java中的IO流原理和流的分類詳解

    Java中的IO流原理和流的分類詳解

    這篇文章主要介紹了Java中的IO流原理和流的分類詳解,Java?io流是Java編程語言中用于輸入和輸出操作的一種機(jī)制。它提供了一組類和接口,用于處理不同類型的數(shù)據(jù)流,包括文件、網(wǎng)絡(luò)連接、內(nèi)存等,需要的朋友可以參考下
    2023-10-10
  • Spring?boot如何在IDEA中讓一個應(yīng)用在不同的端口多次啟動詳解

    Spring?boot如何在IDEA中讓一個應(yīng)用在不同的端口多次啟動詳解

    在開發(fā)過程中,SpringBoot項(xiàng)目的多端口啟動是一個實(shí)用的需求,特別是在進(jìn)行并發(fā)測試或者隔離環(huán)境時,這篇文章主要介紹了Spring?boot如何在IDEA中讓一個應(yīng)用在不同的端口多次啟動的相關(guān)資料,需要的朋友可以參考下
    2026-01-01
  • 鴻蒙與Java跨平臺Socket通信實(shí)戰(zhàn)代碼實(shí)例

    鴻蒙與Java跨平臺Socket通信實(shí)戰(zhàn)代碼實(shí)例

    Socket是網(wǎng)絡(luò)編程的基礎(chǔ),提供了進(jìn)程間通信的通用接口,下面這篇文章主要介紹了鴻蒙與Java跨平臺Socket通信實(shí)戰(zhàn)的相關(guān)資料,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2026-03-03
  • Java?枚舉的常用技巧匯總

    Java?枚舉的常用技巧匯總

    在Java中,枚舉類型是一種特殊的數(shù)據(jù)類型,允許定義一組固定的常量,默認(rèn)情況下,toString方法返回枚舉常量的名稱,本文提供了一個完整的代碼示例,展示了如何在Java中通過重寫枚舉的toString方法來展示枚舉實(shí)例的字段信息,感興趣的朋友一起看看吧
    2025-01-01
  • Java利用OSHI實(shí)現(xiàn)獲取機(jī)器的硬件信息

    Java利用OSHI實(shí)現(xiàn)獲取機(jī)器的硬件信息

    OSHI(Operating System and Hardware Information)是一個開源的Java庫,用于獲取操作系統(tǒng)和硬件的詳細(xì)信息,下面我們就來看看他的具體使用吧
    2024-11-11

最新評論

广丰县| 建昌县| 马尔康县| 孝昌县| 油尖旺区| 平顺县| 蒲城县| 临桂县| 洞口县| 乌拉特中旗| 伊川县| 富蕴县| 雅安市| 英超| 泸溪县| 定襄县| 上蔡县| 凌云县| 西畴县| 宿松县| 广州市| 武定县| 大连市| 澜沧| 延边| 永安市| 莱州市| 宁阳县| 焦作市| 靖西县| 旺苍县| 磐安县| 齐齐哈尔市| 九龙坡区| 逊克县| 丽水市| 邯郸县| 塔河县| 册亨县| 饶阳县| 广水市|