使用Open CV在图像中添加文本

时间:2019-02-13 06:33:14

标签: python opencv typeerror

我正在使用开放式简历跟踪对象。我在互联网上看过代码。在我运行时,它显示出这样的错误。

Traceback (most recent call last):
  File "/home/pi/Downloads/Pi-tracker-master/obj.py", line 32, in <module>
    cv2.putText(img, str(i+1),font,(x,y+h),(0,255,255))
TypeError: an integer is required (got type tuple)

我在堆栈溢出here中找到了针对该错误的一个答案,但是我不清楚那个答案。

我正在使用的代码:

import cv2
import numpy as np

lowerBound=np.array([33,80,40])
upperBound=np.array([102,255,255])

cam= cv2.VideoCapture(0)
kernelOpen=np.ones((5,5))
kernelClose=np.ones((20,20))

font=cv2.FONT_HERSHEY_SIMPLEX,2,0.5,0,3,1

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),font,(x,y+h),(0,255,255))
    cv2.imshow("maskClose",maskClose)
    cv2.imshow("maskOpen",maskOpen)
    cv2.imshow("mask",mask)
    cv2.imshow("cam",img)
    cv2.waitKey(10)

3 个答案:

答案 0 :(得分:1)

检查以下代码

font                   = cv2.FONT_HERSHEY_SIMPLEX
bottomLeftCornerOfText = (10,500)
fontScale              = 1
fontColor              = (255,255,255)
lineType               = 2

cv2.putText(img,'Some text', 
    bottomLeftCornerOfText, 
    font, 
    fontScale,
    fontColor,
    lineType)

答案 1 :(得分:0)

您的参数顺序错误。您的元组(x,y+h)位于期望使用字体的位置(如果我没记错的话,字体只是编码为整数)。 putText期望按以下顺序输入:

  

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

您只需要匹配此内容。例如:

cv2.putText(img, str(i+1),(x,y+h),font,1,(0,255,255))

答案 2 :(得分:0)

下面是带有放置文本的工作代码。 请从下面参考,并对代码进行必要的更改。

import cv2
import numpy as np

lowerBound=np.array([33,80,40])
upperBound=np.array([102,255,255])

cam= cv2.VideoCapture('1.mp4')
kernelOpen=np.ones((5,5))
kernelClose=np.ones((20,20))

font                   = cv2.FONT_HERSHEY_SIMPLEX
bottomLeftCornerOfText = (10,500)
fontScale              = 1
fontColor              = (255,255,255)
lineType               = 2

ret, img = cam.read()
while ret:  
    img=cv2.resize(img,(340,220))
    cv2.putText(img,'Hello World!', 
    bottomLeftCornerOfText, 
    font, 
    fontScale,
    fontColor,
    lineType)
    ret, img=cam.read()