我正在学习python,所以我尝试使用OpenCV。 程序仅检测一张脸,如果有2张脸,将仅显示一张 这是代码:
def getData(id):
psg = psgconnect.cursor()
psg.execute("SELECT name FROM people WHERE id=%s", (Id,))
cursor = psg.execute("SELECT name FROM people WHERE id=%s", (Id,))
Data = None
psgconnect.commit()
row = psg.fetchone()
#psgconnect.close()
return row
while True:
ret, img = cam.read()
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
face = faceDetect.detectMultiScale(gray, 1.3, 5)
for(x, y, w, h) in face:
cv2.rectangle(img, (x, y), (x + w, y + h), (0, 255, 0), 2)
Id, conf = recognizer.predict(gray[y:y + h, x:x + w])
data = getData(Id)
# if data != None:
if(conf<50):
#cv2.putText(img, data[0], (x, y + h), cv2.FONT_HERSHEY_PLAIN, 4, (255, 255, 255), 4)
cv2.putText(img, 'nashel', (x, y + h), cv2.FONT_HERSHEY_PLAIN, 4, (255, 255, 255), 4)
elif(conf>51):
cv2.putText(img, 'Unknown', (x, y + h), cv2.FONT_HERSHEY_PLAIN, 4, (255, 255, 255), 4)
cv2.imshow("Face", img)
k = cv2.waitKey(10)
print("suda doshli")
if k == 27:
#psg.close()
psgconnect.close()
print("zdes")
break
cam.release()
input()
cv2.destroyAllWindows()
会发生什么?
答案 0 :(得分:0)
由于您没有任何答案,即使我不使用OpenCV,我也会尽力帮助您。
首先,您确定OpenCV仅在两张图像中检测到一张脸,还是循环问题?
您可以使用简单的print
检查检测到多少张脸:
ret, img = cam.read()
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
face = faceDetect.detectMultiScale(gray, 1.3, 5)
print len(face)
如果打印为1,则实际上OpenCV如何处理您的图像(在这种情况下,由于对OpenCV一无所知,我真的帮不了您)。但是,当我阅读您的代码时,我感觉有些事情关闭了(即使在您编辑之后),所以我建议您尝试以下操作:
def getData(id):
psg = psgconnect.cursor()
psg.execute("SELECT name FROM people WHERE id=%s", (Id,))
cursor = psg.execute("SELECT name FROM people WHERE id=%s", (Id,))
Data = None
psgconnect.commit()
row = psg.fetchone()
#psgconnect.close()
return row
while True:
ret, img = cam.read()
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
face = faceDetect.detectMultiScale(gray, 1.3, 5)
for(x, y, w, h) in face:
cv2.rectangle(img, (x, y), (x + w, y + h), (0, 255, 0), 2)
Id, conf = recognizer.predict(gray[y:y + h, x:x + w])
data = getData(Id)
if(conf<50):
cv2.putText(img, 'nashel', (x, y + h), cv2.FONT_HERSHEY_PLAIN, 4, (255, 255, 255), 4)
elif(conf>51):
cv2.putText(img, 'Unknown', (x, y + h), cv2.FONT_HERSHEY_PLAIN, 4, (255, 255, 255), 4)
cv2.imshow("Face", img)
k = cv2.waitKey(10)
print("suda doshli")
if k == 27:
#psg.close()
psgconnect.close()
print("zdes")
break
cam.release()
input()
cv2.destroyAllWindows()
让我知道怎么回事!
作为旁注:由于您正在学习python并考虑在第一次编辑之前粘贴的代码,因此我想强调一下缩进在python中的重要性。缩进的更改可以完全改变代码的含义,因此了解某些块的缩进方式和原因非常重要。