Opencv 为什么matchShapes在';他不应该这么做?

Opencv 为什么matchShapes在';他不应该这么做?,opencv,Opencv,我正在尝试匹配方向(箭头:左、上等等)。 事实上,如果我想用不同的箭头模板来匹配我从相机中得到的箭头,它的效果是非常好的(所以箭头是非常简单的对象) 我得到的结果值类似于0.005-0.2(我想这很好) 但有时它也会为与我的模板(方向箭头)非常不同的轮廓提供非常低的值(说这是一个很好的结果),它也可以是0.2,甚至是我曾经得到的0.07(非常小的值) 例如,匹配这两个轮廓可以得到很好的匹配值(0.2): -模板图像(轮廓) -一些垃圾轮廓(我在onCameraFrame中得到的mat框架的一部分

我正在尝试匹配方向(箭头:左、上等等)。 事实上,如果我想用不同的箭头模板来匹配我从相机中得到的箭头,它的效果是非常好的(所以箭头是非常简单的对象) 我得到的结果值类似于0.005-0.2(我想这很好)

但有时它也会为与我的模板(方向箭头)非常不同的轮廓提供非常低的值(说这是一个很好的结果),它也可以是0.2,甚至是我曾经得到的0.07(非常小的值)

例如,匹配这两个轮廓可以得到很好的匹配值(0.2):

-模板图像(轮廓)

-一些垃圾轮廓(我在
onCameraFrame
中得到的
mat
框架的一部分)

一个是0.07(我没有截图),还有一些垃圾轮廓

为什么会这样

double result = Imgproc.matchShapes(inputContour, templateContour, Imgproc.CV_CONTOURS_MATCH_I3, 0.0);

可能重复@Ped7g,不管怎样,没有答案,至少我给出了等高线的例子,而不仅仅是一些照片是/否,关键是它是某个Hu矩计算的结果,所以如果你对它了解得足够多,你可以直接用类似的公式重新计算等高线,看看为什么结果如此倾斜和相似(最终,在某些情况下,您可能会发现opencv计算这些公式时存在一些细微的错误,但更可能的是,这些输入图像的结果是正确的,混淆了基于hu矩的匹配公式)。您也可以尝试不同的方法,如果它们更适合。如果将第二个轮廓旋转180度,则“相当”与曲线箭头类似。不确定此处是否使用旋转不变矩。@匹配两个形状的user924总是在查找它们之间的相关性,这导致概率分数在0到1之间。因此,无论任何两个形状有多斜,分数都不是零,而是非常小(可以忽略不计)接近零的值。