Python OpenCV: 无法调整图像大小

2024-06-16 11:35:01 发布

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

我正在使用Python 3和opencv3。我正在尝试使用特征脸识别器,它使用相同大小的图像作为训练和测试数据集。我从网络摄像头读取图像,并将图像大小调整为200 x 200,但显示错误。

这是我的代码:

faceDetect=cv2.CascadeClassifier('haarcascade_frontalface_default.xml')
cam=cv2.VideoCapture(0);
rec=cv2.face.EigenFaceRecognizer_create()
#rec=cv2.face.LBPHFaceRecognizer_create()
rec.read("recognizer/EigenData.xml")
id=0

fontFace = cv2.FONT_HERSHEY_SIMPLEX
fontScale = 1
fontColor = (0, 0, 255)

while(True):
    ret,img=cam.read();

    resize_img = img.resize((200,200) , img)
    gray=cv2.cvtColor(resize_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])   #EigenFace Predict
        cv2.putText(img,str(id),(x,y+h), fontFace, fontScale, fontColor,thickness=2)

    cv2.imshow("Face", img);
    if(cv2.waitKey(1)==ord('q')):
        break;

cam.release()
cv2.destroyAllWindows()

我得到的错误是:

resize_img = img.resize((200,200) , img)
TypeError: 'tuple' object cannot be interpreted as an integer

Tags: 图像idimgread错误createxmlcv2
1条回答
网友
1楼 · 发布于 2024-06-16 11:35:01

OpenCV使用NumPy数组作为表示图像的基本数据类型。实际上,NumPy有一个resize方法来“调整”数据的大小,但是您没有正确使用它。通过consulting the documentationnumpy.resize方法要求您反转参数的顺序。首先输入数组,然后是所需的大小。你说得差不多对了-把论点的顺序调换一下就行了。

但是,我不相信这是您要寻找的,因为numpy.resize用输入的重复副本填充输出数组-特别是因为您这样做是为了面部识别。我相信您希望调整图像的内容的大小以适应所需的大小,而不是使用原始大小不变的输入的重复副本填充数组。

因此,^{}更适合您。你把它叫做numpy.resize

resize_image = cv2.resize(img, (200,200))

请注意,默认的大小调整方法使用双线性插值。如果要使用其他方法,则必须提供附加参数interpolation才能执行此操作。如果要执行三次插值,可以执行以下操作:

resize_image = cv2.resize(img, (200,200), interpolation=cv2.INTER_CUBIC)

查看cv2.resize上的文档了解更多详细信息:https://docs.opencv.org/3.0-beta/modules/imgproc/doc/geometric_transformations.html#resize

相关问题 更多 >