Java - 找出两张图片相同的地方
Java - Find where two images are the same
我正在研究阈值算法。我正在尝试使用两种不同的算法,然后计算生成的图像以找到它们都放置黑色像素的位置。
这是我写的代码:
public static BufferedImage andImage(BufferedImage one, BufferedImage two)
{
BufferedImage result = new BufferedImage(one.getWidth(), one.getHeight(), BufferedImage.TYPE_BYTE_GRAY);
result.getGraphics().drawImage(one, 0, 0, null);
WritableRaster rasterOne = result.getRaster();
WritableRaster rasterTwo = two.getRaster();
int[] pixelsOne = new int[one.getWidth()];
int[] pixelsTwo = new int[two.getWidth()];
for (int y = 0; y < two.getHeight(); y++)
{
rasterOne.getPixels(0, y, one.getWidth(), 1, pixelsOne);
rasterTwo.getPixels(0, y, two.getWidth(), 1, pixelsTwo);
for (int i = 0; i < pixelsOne.length; i++)
{
if (pixelsTwo[i] == 255 && pixelsOne[i] == 255)
{
pixelsOne[i] = 255;
}
else
pixelsOne[i] = 0;
}
rasterOne.setPixels(0, y, one.getWidth(), 1, pixelsOne);
}
return result;
}
它得出的结果是两个图像的或运算。我觉得这是一个非常简单的问题,但我似乎找不到问题所在。
编辑:
所有像素都是 0 或 255。
我调换了黑白数字。应该是:
public static BufferedImage andImage(BufferedImage one, BufferedImage two)
{
BufferedImage result = new BufferedImage(one.getWidth(), one.getHeight(), BufferedImage.TYPE_BYTE_GRAY);
result.getGraphics().drawImage(one, 0, 0, null);
WritableRaster rasterOne = result.getRaster();
WritableRaster rasterTwo = two.getRaster();
int[] pixelsOne = new int[one.getWidth()];
int[] pixelsTwo = new int[two.getWidth()];
for (int y = 0; y < two.getHeight(); y++)
{
rasterOne.getPixels(0, y, one.getWidth(), 1, pixelsOne);
rasterTwo.getPixels(0, y, two.getWidth(), 1, pixelsTwo);
for (int i = 0; i < pixelsOne.length; i++)
{
if (pixelsTwo[i] == 0 && pixelsOne[i] == 0)
pixelsOne[i] = 0;
else
pixelsOne[i] = 255;
}
rasterOne.setPixels(0, y, one.getWidth(), 1, pixelsOne);
}
return result;
}
我正在研究阈值算法。我正在尝试使用两种不同的算法,然后计算生成的图像以找到它们都放置黑色像素的位置。
这是我写的代码:
public static BufferedImage andImage(BufferedImage one, BufferedImage two)
{
BufferedImage result = new BufferedImage(one.getWidth(), one.getHeight(), BufferedImage.TYPE_BYTE_GRAY);
result.getGraphics().drawImage(one, 0, 0, null);
WritableRaster rasterOne = result.getRaster();
WritableRaster rasterTwo = two.getRaster();
int[] pixelsOne = new int[one.getWidth()];
int[] pixelsTwo = new int[two.getWidth()];
for (int y = 0; y < two.getHeight(); y++)
{
rasterOne.getPixels(0, y, one.getWidth(), 1, pixelsOne);
rasterTwo.getPixels(0, y, two.getWidth(), 1, pixelsTwo);
for (int i = 0; i < pixelsOne.length; i++)
{
if (pixelsTwo[i] == 255 && pixelsOne[i] == 255)
{
pixelsOne[i] = 255;
}
else
pixelsOne[i] = 0;
}
rasterOne.setPixels(0, y, one.getWidth(), 1, pixelsOne);
}
return result;
}
它得出的结果是两个图像的或运算。我觉得这是一个非常简单的问题,但我似乎找不到问题所在。
编辑: 所有像素都是 0 或 255。
我调换了黑白数字。应该是:
public static BufferedImage andImage(BufferedImage one, BufferedImage two)
{
BufferedImage result = new BufferedImage(one.getWidth(), one.getHeight(), BufferedImage.TYPE_BYTE_GRAY);
result.getGraphics().drawImage(one, 0, 0, null);
WritableRaster rasterOne = result.getRaster();
WritableRaster rasterTwo = two.getRaster();
int[] pixelsOne = new int[one.getWidth()];
int[] pixelsTwo = new int[two.getWidth()];
for (int y = 0; y < two.getHeight(); y++)
{
rasterOne.getPixels(0, y, one.getWidth(), 1, pixelsOne);
rasterTwo.getPixels(0, y, two.getWidth(), 1, pixelsTwo);
for (int i = 0; i < pixelsOne.length; i++)
{
if (pixelsTwo[i] == 0 && pixelsOne[i] == 0)
pixelsOne[i] = 0;
else
pixelsOne[i] = 255;
}
rasterOne.setPixels(0, y, one.getWidth(), 1, pixelsOne);
}
return result;
}