如何存储检测到的人脸的位置

2024-04-18 23:25:14 发布

您现在位置:Python中文网/ 问答频道 /正文

只要检测到一张脸,我就可以用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)

编辑: 对于那些想要更多背景的人,我基本上是想跟踪手的运动,我在做颜色分割来检测皮肤,而人脸干扰了跟踪,因为有时haar检测器检测不到影响手位置估计的人脸,我采取的第一个方法是去除人脸,我知道有更好的方法,但我对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)

Tags: inforifpop人脸insertx1x2
1条回答
网友
1楼 · 发布于 2024-04-18 23:25:14

你可以用这个:

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)

相关问题 更多 >