【问题标题】:Python OpenCV: Cannot resize imagePython OpenCV:无法调整图像大小
【发布时间】:2017-10-20 07:40:40
【问题描述】:

我正在使用 Python 3 和 OpenCV 3。我正在尝试使用 EigenFace Recognizer,它对训练和测试数据集使用相同大小的图像。我从网络摄像头读取图像并将图像大小调整为 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

【问题讨论】:

    标签: python image opencv image-processing image-resizing


    【解决方案1】:

    OpenCV 使用 NumPy 数组作为基本数据类型来表示图像。事实上,NumPy 有一个 resize 方法来“调整”数据的大小,但你没有正确使用它。通过consulting the documentationnumpy.resize 方法要求您颠倒参数的顺序。输入数组首先出现,然后是所需的大小。你几乎是正确的 - 只需交换参数的顺序。

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

    因此,cv2.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

    【讨论】:

    • opencv 3.0 beta 的链接不好。我建议使用 opencv 3.3 文档的链接
    • @Miki 我在最新文档中找不到对函数的 Python 调用。设法只在 3.0.0 开发版中找到它。
    • 你是对的。我不明白为什么新文档没有 python 函数......但是,应该避免使用 3.0 beta(代码和文档)。它包含太多错误/错误的解释。顺便说一句,我不是反对者;)
    • @Miki :D 没问题。那么我应该链接到 2.4 吗?...但是 OP 明确使用 3...我也可以链接到有关调整大小的官方 3.3 教程。
    猜你喜欢
    • 2018-11-20
    • 1970-01-01
    • 2014-07-21
    • 2019-11-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-07
    相关资源
    最近更新 更多