我正在比较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,我尝试将其分配给变量但是没有用。它应该有返回类型吗?它的格式是?
还有我如何比较2张图片?
根据拍摄快照的移动相机,这两个图像的尺寸可能不同。
也可以识别是否在早晚拍摄相同的图像???
先谢谢。
答案 0 :(得分: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);
答案 1 :(得分:0)
此代码会将基本图像中的像素与其他图像进行比较。
如果位置(x,y)上的两个像素都相同,则在结果图像中添加相同的像素而不会发生变化。否则,它将修改该像素并添加到我们的结果图像中。
如果基线图像的高度或宽度大于其他图像,则它将为其他像素添加红色,这是其他图像中不可用的。
两种图像文件格式都应相同,以便进行比较。
代码将使用基本图像文件格式创建结果图像文件,并且结果图像包含观察到差异的突出显示部分。
这是一个Link To Code,并附带了示例示例。