資源簡(jiǎn)介
基于OpenCV Java的Android項(xiàng)目工具完整代碼,請(qǐng)自行集成OpenCV Android SDK,然后把工具文件拖進(jìn)去就可以測(cè)試使用。 參考了CSDN 用戶:茶飲月 的“Java學(xué)習(xí)記錄--OpenCV使用教程” 而完成。

代碼片段和文件信息
package?com.example.nicesky.idphoto_opencv330_jni.java.practice;
import?android.graphics.Bitmap;
import?com.example.nicesky.idphoto_opencv330_jni.java.L;
import?org.opencv.android.Utils;
import?org.opencv.core.CvType;
import?org.opencv.core.Mat;
import?org.opencv.core.Rect;
import?org.opencv.core.Size;
import?org.opencv.imgcodecs.Imgcodecs;
import?org.opencv.imgproc.Imgproc;
/**
?*?Created?by?fairytale110@foxmail.com?on?2018/5/17.
?*?com.example.nicesky.idphoto_opencv330_jni.java.practice
?*?IdPhoto_OpenCV330_Jni
?*?DEscriptION:
?*?UPDATE_BY:
?*?UIPDATE_DATE:
?*/
public?class?Practice?{
????private?static?String?TAG?=?“Practice==>?“;
????private?static?double?thresh?=?25;
????private?static?double?maxval?=?255;
????/**
?????*
?????*?@param?filePath??銀行卡圖片在SD卡的完整路徑?如?/storage/emulated/0/img_credit.png
?????*?@return
?????*/
????public?static?Bitmap?getNumImg(String?filePath)?{
????????//Bitmap?srcBtimap?=?BitmapFactory.decodeFile(fileName);
????????//讀取圖像
????????Mat?srcMat?=?Imgcodecs.imread(filePath);
????????//?Mat?srcMat?=?new?Mat(srcBtimap.getHeight()srcBtimap.getWidth()?CvType.CV_8UC3);
????????//?Utils.bitmapToMat(srcBtimapsrcMat);
????????Mat?dsstMat?=?new?Mat(srcMat.height()?srcMat.width()?CvType.CV_8UC3);
????????//灰度,,黑白照
????????Imgproc.cvtColor(srcMat?dsstMat?Imgproc.COLOR_RGB2GRAY);
????????//二值化處理?,只留兩個(gè)值,黑白
????????Mat?binaryMat?=?new?Mat(dsstMat.height()?dsstMat.width()?CvType.CV_8UC1);
????????Imgproc.threshold(dsstMat?binaryMat?thresh?maxval?Imgproc.THRESH_BINARY);
????????//使用3*3的圖片去腐蝕
????????Mat?erodeMat?=?new?Mat();
????????Mat?element?=?Imgproc.getStructuringElement(Imgproc.MORPH_RECT?new?Size(3?3));
????????Imgproc.erode(binaryMat?erodeMat?element);
????????//遍歷獲取和修改像素值
????????//二值圖片當(dāng)成一個(gè)二維矩陣就可以了雙重循環(huán)使用get方法獲取像素點(diǎn)使用put方法修改像素點(diǎn)
???????//?6.過濾和切割
????????/**
????????過濾和切割要找到一個(gè)開始行或列結(jié)束行或列這就有一個(gè)簡(jiǎn)單的算法.
????????????????該算法從第一行開始遍歷
????????????????統(tǒng)計(jì)每一行的像素點(diǎn)值符合閾值的個(gè)數(shù)再根據(jù)個(gè)數(shù)判斷該點(diǎn)是否為邊界.
????????????????找到后過濾和切割自然就很簡(jiǎn)單了直接創(chuàng)建個(gè)該范圍的新的Mat對(duì)象.*/
????????Mat?imgSrc?=?new?Mat();
????????Imgproc.erode(binaryMat?imgSrc?element);
????????int?a?=?0;
????????int?b?=?imgSrc.height();
????????int?state?=?0;
????????int?imgN?=?5;
????????for?(int?y?=?0;?y?????????????int?count?=?0;
????????????for?(int?x?=?0;?x?????????????????//?得到該行像素點(diǎn)的值
????????????????byte[]?data?=?new?byte[1];
????????????????imgSrc.get(y?x?data);
????????????????if?(data[0]?==?0)
????????????????????count?=?count?+?1;
????????????}
????????????if?(state?==?0)//?還未到有效行
????????????{
????????????????if?(count?>=?150)//?找到了開始行
????????????????{//?有效行允許十個(gè)像素點(diǎn)的噪聲
????????????????????a?=?y;
????????????????????state?=?1;
????????????????}
????????????}?else?if?(state?==?1)?{
????????????????if?(count?<=?100)//?找到了結(jié)束行
????????????????{//?有效行允許十個(gè)像素點(diǎn)的噪聲
????????????????????b?=?y;
????????????????????state?=?2;
???????????
?屬性????????????大小?????日期????時(shí)間???名稱
-----------?---------??----------?-----??----
?????文件??????872553??2018-05-17?17:00??img_creditcard.png
?????文件????????4225??2018-05-18?11:44??Practice.java
評(píng)論
共有 條評(píng)論