Java 如何在openCV中检测两幅图像之间的变化区域?

Java 如何在openCV中检测两幅图像之间的变化区域?,java,opencv,image-processing,Java,Opencv,Image Processing,我使用特征来检测两幅图像之间的相似性,并找出图像的哪一部分发生了变化。测试场景是,我首先拍摄一张表的图片作为参考,然后在表上添加一个对象,然后在相同的位置再次拍摄 然后我调整并计算两张图片上的HOG特征数组: Imgproc.resize(mGray,mGray,新大小(128256)); hog.compute(mGray,des); 然后我计算距离: 双倍距离=0; 对于(int i=0;i

我使用特征来检测两幅图像之间的相似性,并找出图像的哪一部分发生了变化。测试场景是,我首先拍摄一张表的图片作为参考,然后在表上添加一个对象,然后在相同的位置再次拍摄

然后我调整并计算两张图片上的HOG特征数组:

Imgproc.resize(mGray,mGray,新大小(128256));
hog.compute(mGray,des);
然后我计算距离:

双倍距离=0;
对于(int i=0;i
现在我可以检测到这两张图片上有变化,但如何快速确定变化的位置?最初,我考虑将图片分割成许多小块,计算这些小块的HOG特征值,并逐块比较距离,但效率很低


如果有更好的方法吗?

Hog描述符只告诉你有变化,而不是变化发生的地方。可以使用筛选特征和描述符,确定匹配的所有特征,并绘制包含所有匹配特征的边界框


您可以使用k-means聚类,然后对聚类数进行逐块比较,而不是对描述符本身进行逐块比较。

您能详细说明为什么SIFT有帮助吗?