0

我正在比较 2 个相似的图像,并想看看两者是否相似。目前我使用了代码:

public void foo(Bitmap bitmapFoo) {
    int[] pixels;

    int height = bitmapFoo.getHeight();
    int width = bitmapFoo.getWidth();

    pixels = new int[height * width];

    bitmapFoo.getPixels(pixels, 0, width, 1, 1, width - 1, height - 1); 


}

我调用函数:foo(img1)哪里:

img1=(Bitmap)data.getExtras().get("data");

我想知道如何获得上面的getpixel,我尝试将它分配给变量但没有用。它应该有返回类型吗?格式是?

还有我如何比较两张图片?

此外,根据拍摄快照的移动相机,这两个图像可能具有不同的尺寸。

还可以识别早晚是否拍摄相同的图像???

提前致谢。

4

2 回答 2

1

此代码会将基础图像中的像素与其他图像进行比较。

  1. 如果位置 (x,y) 的两个像素相同,则在结果图像中添加相同的像素而不进行更改。否则,它会修改该像素并添加到我们的结果图像中。

  2. 如果基线图像的高度或宽度大于其他图像,则它将为其他图像中不可用的额外像素添加红色。

  3. 两种图像文件格式应相同以进行比较。

  4. 代码将使用基本图像文件格式来创建结果图像文件,并且结果图像包含观察到差异的突出显示部分。

这是附有示例示例的代码链接。

于 2019-07-25T11:18:28.500 回答
0

如果要将位图的像素复制到字节数组中,最简单的方法是:

int height = bitmapFoo.getHeight();
int width = bitmapFoo.getWidth();

pixels = new int[height * width];

bitmapFoo.copyPixelsToBuffer(pixels);

请参阅文档

我应该警告你,你必须小心处理这个问题,否则你会得到 OutOfMemoryError。

获取所有像素

bitmapFoo.copyPixelsToBuffer(pixels);

或者

bitmapFoo.getPixels(pixels, 0, width, 0, 0, width, height);

获得一个像素

这两个参数必须是 [0, getWidth()-1] 和 [0, getHeight()-1] 范围内的两个整数

int pix = bitmapFoo.getPixel(x, y);
于 2013-08-21T22:06:03.350 回答