• 大小: 854KB
    文件类型: .zip
    金币: 1
    下载: 0 次
    发布日期: 2021-05-22
  • 语言: Java
  • 标签: OpenC  Android  Java  银行卡  

资源简介

基于OpenCV Java的Android项目工具完整代码,请自行集成OpenCV Android SDK,然后把工具文件拖进去就可以测试使用。 参考了CSDN 用户:茶饮月 的“Java学习记录--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);

        //二值化处理 ,只留两个值,黑白
        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);

        //遍历获取和修改像素值
        //二值图片当成一个二维矩阵就可以了双重循环使用get方法获取像素点使用put方法修改像素点
       // 6.过滤和切割
        /**
        过滤和切割要找到一个开始行或列结束行或列这就有一个简单的算法.
                该算法从第一行开始遍历
                统计每一行的像素点值符合阈值的个数再根据个数判断该点是否为边界.
                找到后过滤和切割自然就很简单了直接创建个该范围的新的Mat对象.*/
        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 < imgSrc.height(); y++) {
            int count = 0;
            for (int x = 0; x < imgSrc.width(); x++) {
                // 得到该行像素点的值
                byte[] data = new byte[1];
                imgSrc.get(y x data);
                if (data[0] == 0)
                    count = count + 1;
            }
            if (state == 0)// 还未到有效行
            {
                if (count >= 150)// 找到了开始行
                {// 有效行允许十个像素点的噪声
                    a = y;
                    state = 1;
                }
            } else if (state == 1) {
                if (count <= 100)// 找到了结束行
                {// 有效行允许十个像素点的噪声
                    b = y;
                    state = 2;
           

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     文件      872553  2018-05-17 17:00  img_creditcard.png
     文件        4225  2018-05-18 11:44  Practice.java

评论

共有 条评论