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

标签 java android image bitmap

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

例如我有 3 张非常相似的图片,但对于每张图片的比较,它返回的结果截然不同: pic1 vs pic2 = 1.71%; pic1 vs pic3 = 0.0045%; pic2 与 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;

}

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

最佳答案

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

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

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

关于java - 两个图像之间的Android java百分比位图像素差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9170488/

相关文章:

android - list 合并失败依赖 com.google.firebase :firebase-analytics:17. 2.2

android - 将 LinearLayout 内的按钮高度与水平方向相匹配

jQuery unwrap 移除错误的容器

iphone - 如何使用iPhone操作系统提供的图像?

java - MathQuiz 在 java 中使用线程

java - 命令在终端中有效但在脚本中无效?

java - JTA - 交易如何注册?

android - ionic : No 'Access-Control-Allow-Origin' header is present on the requested resource

java - 如何将 PNG 文件数组添加到 ArrayList<Image> - Java

Java FreeTTS 缺少语音