如何存储检测到的面部opencv的位置

时间:2018-01-05 08:33:49

标签: python opencv

只要检测到面部,我就可以使用for (x, y, w, h) in faces:获取值,但在没有检测到面部后,我会丢失这些值。

我想绘制一个矩形来覆盖检测到最后一张脸的区域并在那里停留一段时间,但是当未检测到脸部时矩形消失。

我尝试将值传递给copy.copy()的新变量,但矩形保持消失。

faces = faceCascade.detectMultiScale(gray, scaleFactor=1.3, minNeighbors=3, minSize=(0, 0))

for (x, y, w, h) in faces:
    if x>0: x2 = copy.copy(x)
    if y>0: y2 = copy.copy(y)
    if w>0: w2 = copy.copy(w)
    if h>0: h2 = copy.copy(h)
    cv2.rectangle(img, (x2, y2), (x2+w2, y2+h2), (0, 0, 0), -1)

编辑: 对于那些想要更多背景的人,我基本上想要跟踪手部动作,我正在进行颜色分割以检测皮肤并且脸部正在干扰跟踪,因为有时哈尔探测器没有检测到影响手部位置估计的面部,这是我采取的第一个方法正在移除面部,我知道有更好的方法,但我是OpenCV的新手。

我将它存储在列表中,

faces_t = [None]*4

while(cam.isOpened():

faces = faceCascade.detectMultiScale(grey, scaleFactor=1.3, minNeighbors=3, minSize=(0, 0))

for (x, y, w, h) in faces:
   faces_t.pop(0)
   faces_t.insert(0,x)
   faces_t.pop(1)
   faces_t.insert(1,y)
   faces_t.pop(2)
   faces_t.insert(2,w)
   faces_t.pop(3)
   faces_t.insert(3,w)

X1 = faces_t[0]
Y1 = faces_t[1]
W1 = faces_t[2]
H1 = faces_t[3]

if any(value is None for value in faces_t):
    pass
else:
    cv2.rectangle(skin_ycrcb, (X1-10, Y1-15), (X1+W1+10, Y1+H1+15), (0, 0, 0), -1)

1 个答案:

答案 0 :(得分:0)

你可以使用它:

faces = faceCascade.detectMultiScale(gray, scaleFactor=1.3, 
minNeighbors=3, minSize=(0, 0))
(X1,Y1,W1,H1) = (0,0,0,0)
for (x, y, w, h) in faces:
    if (x,y,w,h) != (0,0,0,0):
       (X1,Y1,W1,H1) = (x,y,w,h)
    cv2.rectangle(img, (X1, Y1), (X1+W1, Y1+H1), (0, 0, 0), -1)