Android java百分比位图两个图像之间的像素差异

sup*_*mus 5 java android image bitmap

我需要在Android上的Java中计算两个图像之间的像素差异.问题是我的代码返回不准确的结果.

例如,我有3个非常相似的图片,但它们返回显着不同的结果,用于比较每个图片:pic1与pic2 = 1.71%; pic1 vs pic3 = 0.0045%; pic2 vs pic3 = 36.7%.

BitmapFactory.Options opt = new BitmapFactory.Options();
    opt.inPreferredConfig = Bitmap.Config.ARGB_8888;
    opt.inSampleSize = 5;
    Bitmap mBitmap1 = BitmapFactory.decodeFile("/sdcard/pic1.jpg", opt);
    Bitmap mBitmap2 = BitmapFactory.decodeFile("/sdcard/pic2.jpg", opt);

    int intColor1 = 0;
    int intColor2 = 0;
    for (int x = 0; x < mBitmap1.getWidth(); x++) {
       for (int y = 0; y < mBitmap1.getHeight(); y++) {
            intColor1 = mBitmap1.getPixel(x, y);
            intColor2 = mBitmap2.getPixel(x, y); 
            //System.out.print(" ("+ x + ","+ y +") c:" + intColor1);   
       }
       String resultString = String.valueOf(intColor1);

    }
    //now calculate percentage difference
    double razlika = (((double)intColor1 - intColor2)/intColor2)*100;

}
Run Code Online (Sandbox Code Playgroud)

我认为我需要比较两个图像的每个像素(intColor1(x,y)vs intColor2(x,y)),但我该怎么做,以后再计算百分比差异?

zrg*_*giu 3

您使用的百分比公式是错误的。例如,#333333 几乎与 #333332 相同(并且您的公式显示它们有 0.003% 的差异)。另外,#323333 与 #333333 几乎相同,但您的公式显示它们有 3% 的差异。

您应该提取每个颜色像素的每个组成位( Color.red() 、 Color.green() 、 Color.blue() ),计算它们每个的差异,然后得到组合的差异百分比。

虽然这种获取两个图像差异的方法简单而有效,但它有一个很大的警告:如果图像内容相同但移动了一个像素(例如向右),您的方法会将它们显示为完全不同。