TypeError:必须为整数(类型为元组)

Ama*_*lan 3 opencv python-3.7

我正在尝试为人脸识别项目或程序设置检测器,但始终出现此错误:

TypeError: an integer is required (got type tuple)
Run Code Online (Sandbox Code Playgroud)

我也尝试过更改:

cv2.putText(img, str(id), (x, y + h), font, 255)

cv2.putText(img, name, (x, y + h), font, 2, (0, 255, 0), 2)

这是我的代码:

import cv2
import numpy as np

faceDetect=cv2.CascadeClassifier('haarcascade_frontalface_default.xml')
cam=cv2.VideoCapture(0)

rec = cv2.face.LBPHFaceRecognizer_create()
rec.read("trainer/training_data.yml")
id=0
font=(cv2.FONT_HERSHEY_SIMPLEX,1,1,0,1)

while(True):
    ret,img=cam.read()
    gray=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
    faces=faceDetect.detectMultiScale(gray,1.3,5)
    for(x,y,w,h) in faces:
        cv2.rectangle(img,(x,y),(x+w,y+h),(0,255,0),2)
        id,conf=rec.predict(gray[y:y+h,x:x+w])
        cv2.putText(img,str(id),(x,y+h),font,255)
    cv2.imshow("FACEDETECTIONPT1",img)
    if(cv2.waitKey(1)==ord('q')):
        break
cam.release()
cv2.destroyAllWindows
Run Code Online (Sandbox Code Playgroud)

eud*_*xos 8

此误导性错误消息的另一个可能原因是,如果img是对 的视图np.ndarray,而不是连续的内存数据。因此,例如,如果你的代码的工作img,它将如果你这样做会失败img=np.flipud(img)

解决方案是进行深拷贝,例如img=np.flipud(img).copy().


小智 5

以我的经验,该错误声明具有误导性。以我为例,坐标(x,y)float代替了int此问题,并进行了修复。


Ama*_*lan 1

从字体中删除了参数并将我的 putText 编辑为cv2.rectangle(img,(x,y),(x+w,y+h),(0,255,0),2),这似乎对我有用。