使用open cv在图像中添加文本

问题描述 投票:0回答:3

我正在使用open cv跟踪对象。我在互联网上查了一个代码。在我运行的时候,它显示出这样的错误。

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)
python opencv typeerror
3个回答
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)

0
投票

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

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

你只需要匹配这个。例如:

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

0
投票

下面是带有put文本的工作代码。请参考以下内容并对您的代码进行必要的更改。

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()
最新问题
© www.soinside.com 2019 - 2024. All rights reserved.