0

我已将 sqlite 数据库中的指纹印象保存为 bitmap 。任何人都可以帮我提供android代码的源代码或链接,以将两个指纹印象作为位图进行比较。为了平等而匹配。

我尝试过使用以下代码。但它与存储在数据库中的所有指纹印象相匹配。

public boolean compare(Bitmap imageToCompare , Bitmap imageInDb )
{
    System.out.println("Inside Compare");
    System.out.println("imageToCompare::::"+imageToCompare);
    System.out.println("imageInDb::::"+imageInDb);

    /*int width = imageToCompare.getWidth();
    System.out.println("width::::::"+width);
    int height = imageToCompare.getHeight();
    System.out.println("height::::"+height);
    int pixelCount = width * height;

    int width1 = imageInDb.getWidth();
    System.out.println("width1::::::"+width1);
    int height1 = imageInDb.getHeight();
    System.out.println("height1::::"+height1);*/
    int pixelCount = mImageWidth * mImageHeight;

    System.out.println("pixelCount::::"+pixelCount);
    int[] pixels1 = new int[pixelCount];
    int[] pixels2 = new int[pixelCount];
    System.out.println("11111111111111111");
    //imageToCompare.getPixels(pixels1, 0, 0, 0, width, height);
    imageToCompare.getPixels(pixels1, 0,mImageWidth, 0, 0, mImageWidth, mImageHeight);
    imageInDb.getPixels(pixels2, 0,mImageWidth, 0,0, mImageWidth, mImageHeight);
    System.out.println("22222222222222");
    for (int i = 0; i < pixelCount; i++) {
        if (pixels1[i] != pixels2[i]) {
            System.out.println("333333333333");
            return false;
        }
    }
    System.out.println("444444444444444444");
    return true;
}

谢谢

4

2 回答 2

0

您不能像字符串比较或逐像素比较那样进行比较。只有当您一次又一次地拥有相同的指纹图像时,才有可能。但在现实中,当你有两次指纹时,两个图像都会有一点点位置变化、角度变化和扫描质量的差异。所以字符串/像素比较是不可能的。

所有扫描仪都提供了用于捕获指纹并进行比较 (1:1) 的 SDK,您可以使用它来开发桌面应用程序。如果您需要在服务器上比对扫描的图像,那么您需要实现自己的自动手指识别算法或者您必须使用第三方服务,例如

  1. 凸轮
  2. M2Sys
  3. 神经技术
于 2020-09-22T13:10:33.293 回答
-1

要比较两个位图,您可以使用适用于 android 的 openCV 库。图像处理有很多功能,这个主题很广泛,取决于您需要的精度。您可以从 cvNorm 函数开始。

在下面的链接中,您将拥有在 Java 下编译的 openCV 库和示例,因此您不必用 C 编写本机代码。

关联

openCV 网站

于 2012-07-10T09:48:34.480 回答