【问题标题】:compare two images is same or not比较两张图片是否相同
【发布时间】:2012-05-11 16:28:05
【问题描述】:

我知道如何比较两个字符串是否相同。这是比较两个字符串的编码 文本视图 t,t1;

String s,s1;
s=t.getText().toString();
s1=t1.setText().toString();
if(s.equals(s1)){
   t.setText("equal");
}
else{
   t.setText("not equal");
}

我需要比较两个图像是否相同的编码。请早点给我

【问题讨论】:

    标签: android image


    【解决方案1】:

    检查高度是否匹配,如果不匹配则返回 false。然后,检查宽度是否匹配,如果不匹配,则返回 false。然后检查每个像素,直到找到不匹配的像素。当你这样做时,返回false。如果每个像素都匹配,则返回 true。

    伪代码

    bool imagesAreEqual(Image i1, Image i2)
    {
        if (i1.getHeight() != i2.getHeight) return false;
        if (i1.getWidth() != i2.getWidth) return false;
    
        for (int y = 0; y < i1.getHeight(); ++y)
           for (int x = 0; x < i1.getWidth(); ++x)
                if (i1.getPixel(x, y) != i2.getPixel(x, y)) return false;
    
        return true;
    }
    

    实际上,如果可以的话,您可能希望将图像视为二维数组,并仅比较字节。我不知道 Android 图像 API,但 getPixel 可能很慢。

    【讨论】:

    • 我在 getpixel() 中遇到了错误;这是 imageview 的未定义方法
    • 这是伪代码——不是真正的代码。您必须查找如何用您的语言完成每件作品。它旨在为您提供算法。
    【解决方案2】:

    如果要检查两个图像是否绝对相等,则从两者中获取字节,并通过逐个元素检查比较两个数组。

    【讨论】:

    • 我想要检查图像在图像视图中的编码是否相同
    【解决方案3】:

    Image 可以定义为 BufferedImage 的抽象,它只包含类似标题的信息。在读取图像像素之前,将图像与其大小进行比较。

    File f1;
    File f2;
    Image i1 = ImageIO.read(f1);
    Image i2 = ImageIO.read(f2);
    if(i1.getHeight() == i2.getHeight
        && i1.getWidth() == i2.getWİdth) {
        BufferedImage b1 = ImageIO.read(f1);
        BufferedImage b2 = ImageIO.read(f2);
        //compare pixels
    }
    

    Image 的读取速度比 BufferedImage 快,因为它不会从文件中获取像素。 为了比较,我建议进行两层或多层像素比较。使用随机会提高您的速度,因为找到一个不匹配的像素就足够了。

    for(i=0; i<N; i++) {
        x = r.nextInt(184);
        y = r.nextInt(184);
        if(b1.getRGB(x,y) != b2.getRGB(x,y)) {
            break;
        }
    }
    

    如果图像通过了随机比较,则逐个像素进行比较,并在发现不匹配像素的情况下中断循环。我回答假设您需要快速运行比较。为此,我不建议使用 MD5 散列,除非您想在大图像目录中查找所有重复图像。如果您只想快速比较两张图像,MD5 没有多大意义,因为它需要读取图像的所有像素以检查哈希值,这会降低 一次比较 的速度。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-08
    • 1970-01-01
    • 2012-06-28
    相关资源
    最近更新 更多