opencv对象检测中的TypeError

时间:2019-04-06 09:24:26

标签: python opencv

使用以下代码进行检测无法正常工作。 5秒后执行将停止,并显示以下错误:

Traceback (most recent call last):
  File "main.py", line 38, in <module>
    cv2.putText(img, str(i+1),(x,y+h),font,(0,255,255))
TypeError: must be real number, not tuple

如何解决此错误?

这是我的代码:

"""
Created on Sat Apr  6 09:53:56 2019

@author: lenovo
"""

import cv2
import numpy as np

lowerBound=np.array([85,153,50])
upperBound=np.array([255,255,255])
cam= cv2.VideoCapture(1)

kernelOpen=np.ones((5,5))
kernelClose=np.ones((20,20))

font = cv2.FONT_HERSHEY_SIMPLEX
while True:
    ret, img=cam.read()
    img=cv2.resize(img,(340,220))

    #convert BGR to HSV
    imgHSV= cv2.cvtColor(img,cv2.COLOR_BGR2HSV)
    # create the Mask
    mask=cv2.inRange(imgHSV,lowerBound,upperBound)
    #morphology
    maskOpen=cv2.morphologyEx(mask,cv2.MORPH_OPEN,kernelOpen)
    maskClose=cv2.morphologyEx(maskOpen,cv2.MORPH_CLOSE,kernelClose)

    maskFinal=maskClose
    _,conts,h=cv2.findContours(maskFinal.copy(),cv2.RETR_EXTERNAL,cv2.CHAIN_APPROX_NONE)

    cv2.drawContours(img,conts,-1,(255,0,0),3)
    for i in range(len(conts)):
        x,y,w,h=cv2.boundingRect(conts[i])
        cv2.rectangle(img,(x,y),(x+w,y+h),(0,0,255), 2)
        cv2.putText(img, str(i+1),(x,y+h),font,(0,255,255))
    cv2.imshow("maskClose",maskClose)
    cv2.imshow("maskOpen",maskOpen)
    cv2.imshow("mask",mask)
    cv2.imshow("cam",img)
    cv2.waitKey(10)

1 个答案:

答案 0 :(得分:0)

根据to the docs putText具有以下签名:

cv2.putText(img, text, org, fontFace, fontScale, color[, thickness[, lineType[, bottomLeftOrigin]]]) → None

这意味着您缺少必填的双重参数fontScale(这就是您的颜色元组被解释为错误的原因)。您需要提供此信息,我怀疑1.0是合理的首选:

  

fontScale –字体比例因子乘以特定于字体的基本大小。

假设基本大小是合理的(无论如何,您最终都必须使用字体大小)。