使用HaarDetectObject()函数检测眼睛时,我们得到如下结果(detectedObjects):
[((110, 47, 44, 44), 11), ((27, 45, 54, 54), 31)]
[((114, 49, 40, 40), 10), ((28, 50, 47, 47), 17)]
[((31, 50, 47, 47), 18), ((106, 47, 44, 44), 3)]
[((106, 46, 44, 44), 38), ((29, 53, 45, 45), 35), ((18, 30, 74, 74), 4)]
[((98, 54, 36, 36), 7), ((108, 48, 45, 45), 31), ((26, 52, 49, 49), 49)]
[((109, 46, 45, 45), 28), ((29, 50, 49, 49), 38)]
[((109, 46, 44, 44), 29), ((27, 47, 53, 53), 27), ((123, 45, 48, 48), 3)]
[((108, 46, 44, 44), 35), ((28, 50, 49, 49), 33)]
[((109, 47, 45, 45), 34), ((28, 53, 47, 47), 35), ((126, 50, 44, 44), 3)]
[((109, 47, 44, 44), 29), ((29, 47, 51, 51), 39)]
[((106, 47, 42, 42), 49), ((27, 49, 49, 49), 30)]
[((31, 54, 42, 42), 13), ((110, 46, 44, 44), 4), ((125, 46, 44, 44), 4), ((27, 35, 66, 66), 6)]
等等
我所知道的是:
(110,47,44,44),11),这是 x,y,w,h,?
x,y是检测到的'眼睛左上角的坐标。在'眼睛' 和w,h是确定检测到的眼睛区域的宽度和高度,因此cvRect格式
如你所见,最后一次检测有4只眼睛 - 因此我问,我怎么知道它们中哪两只是我完美检测到的眼睛?我的意思是,看到任何i的眼睛[i] [0] [0],我们可以知道眼睛是正确还是左眼。但在这里,我们有两只左眼和两只右眼, 眼睛[0]和眼睛[3]是左眼,眼睛[1]和眼睛[2]是正确的。
这是我的问题,现在如果我只得到右眼和左眼的两个检测结果中的一个,我该怎么做?
早些时候我认为eye [i] [1]可以用作某种分数。我暂时无法访问互联网,所以我认为。但正如我刚刚发现的那样,它并不是一些质量得分。
所以在我们的例子中,眼睛[0] [1]是13,眼睛[1] [1]是4,眼睛[2] [1]是4,眼睛[3] [1]是6。 让我们称之为Q
在其余的检测中,我看到一个模式,我的其他检测的Q值很高,通常在40-60左右,所以我认为在这个范围内的Q可能表示最佳检测。但是和我之前说的那样,它不是。 / p>
那么我如何确定哪只眼睛'在'眼睛'是最好的检测?
答案 0 :(得分:0)
我会说你可以使用以前的结果,并为每个图像的检测到的眼睛提供更多的分数(假设你正在使用视频)。
您还可以使用参数,例如眼间距离来找到最佳匹配对。 你最终还可以去一些更复杂的东西(比如耦合的头部/眼睛检测或背景减法)来获得自己的模式并搜索最佳匹配眼睛位置。
如果该方法为您提供4只眼睛,您必须先通过预处理图像来增强其结果,或者在算法中添加更多复杂性以过滤掉结果。