使用this图片作为参考我想查找this图片底部的脏点。两张图片之间的差异
我能够将第二个图像转换为相同的比例和方向,现在尝试使用absdiff
找到该点,但由于图像不完美,我在diff image上有边缘。
我在想,代替具有相同坐标的像素之间的差异,我需要在像n乘n像素的区域找到最小差异。所以问题是:OpenCV是否有这方面的帮助和/或是否有更好的解决方案?
public static Image<Bgr, Byte> Diff(Image<Bgr, Byte> image1,
Image<Bgr, byte> image2,
int erodeIterations=2)
{
return Diff(image1, image2, new Bgr(50, 50, 50), erodeIterations);
}
public static Image<Bgr, Byte> Diff(Image<Bgr, Byte> image1,
Image<Bgr, byte> image2,
Bgr thresholdColor,
int erodeIterations)
{
var diff = image1.AbsDiff(image2);
diff = diff.ThresholdToZero(thresholdColor);
diff = diff.Erode(erodeIterations);
return diff;
}
问题在于图像可能永远不会完美对齐,因为在用于透视变换的单应矩阵中总是存在一些错误。 – Igonato
确实如此,但如果图像应该与图像匹配的区域相差很小,则只应在差异图像中获取边缘。有可见噪声的地方,您将在差异图像中获得整个高强度区域。在你的代码中,你正在寻找一个区域的最小差异。我建议你改变这个来计算显着不同像素的数量,然后找到最大值。 – Zaphod
我有你的想法,它可以比我做的更好。 – Igonato