Java - 检查一个图像是否包含另一个图像

时间:2014-06-10 23:57:30

标签: java image loops bufferedimage

我有这样的代码:

for (int hX = 0; hX <= haystack.getWidth() - needle.getWidth(); hX ++) {
    for (int hY = 0; hY <= haystack.getHeight() - needle.getHeight(); hY ++) {
        placement: for (int nX = 0; nX < needle.getWidth(); nX ++) {
            for (int nY = 0; nY < needle.getHeight(); nY ++) {
                if (haystack.getRGB(nX + hX, nY + hY) != needle.getRGB(nX, nY)) {
                    break placement;
                }
            }
            return new Point(hX, hY);
        }
    }
}
return null;

但是无论图像是否包含其他图像,它总是返回null。我不明白为什么,因为我认为这段代码是准确的。有人可以向我指出我做错了什么,或建议另一种方法来确定较大的图像是否包含较小的图像?

1 个答案:

答案 0 :(得分:1)

奇怪的是,这个方法总是返回null,因为只要它看到针的第一行像素匹配haystack的某个部分,该算法就会返回Point。考虑使用continue语句或使用标志并修改循环条件。

可能还有其他一些原因,它总是返回null。确保你没有把针和干草堆混在一起,干草堆的某些部分实际上包含与针完全相同的RGB值。

你也应该做一些小的测试用例。例如,如果针和干草堆是相同的,那么它应该总是返回一个(0,0)点。