我得到了这个错误---> TypeError: integer argument expected, got float.

问题描述 投票:1回答:1

这是一个简单的手势识别使用python,opencv库在使用我们将在本教程中只使用2个库。

OpenCVNumpy import cv2 import numpy as np from pynput.mouse import Button, Controller import wx mouse=Controller()

app=wx.App(False)
(sx,sy)=wx.GetDisplaySize()
(camx,camy)=(320,240)

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))
pinchFlag=0

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
result = cv2.findContours(maskFinal.copy(), cv2.RETR_TREE, cv2.CHAIN_APPROX_NONE)
conts,h=result if len(result) == 2 else result[1:3]

if(len(conts)==2):
    if(pinchFlag==1):
        pinchFlag=0
        mouse.release(Button.left)
    x1,y1,w1,h1=cv2.boundingRect(conts[0])
    x2,y2,w2,h2=cv2.boundingRect(conts[1])
    cv2.rectangle(img,(x1,y1),(x1+w1,y1+h1),(255,0,0),2)
    cv2.rectangle(img,(x2,y2),(x2+w2,y2+h2),(255,0,0),2)
    cx1=x1+w1/2
    cy1=y1+h1/2
    cx2=x2+w2/2
    cy2=y2+h2/2
    cx=(cx1+cx2)/2
    cy=(cy1+cy2)/2
    cv2.line(img, (cx1,cy1),(cx2,cy2),(255,0,0),2)
    cv2.circle(img, (cx,cy),2,(0,0,255),2)
    mouseLoc=(sx-(cx*sx/camx), cy*sy/camy)
    mouse.position=mouseLoc 
    while mouse.position!=mouseLoc:
        pass
elif(len(conts)==1):
    x,y,w,h=cv2.boundingRect(conts[0])
    if(pinchFlag==0):
        pinchFlag=1
        mouse.press(Button.left)
    cv2.rectangle(img,(x,y),(x+w,y+h),(255,0,0),2)
    cx=x+w/2
    cy=y+h/2
    cv2.circle(img,(cx,cy),(w+h)/4,(0,0,255),2)
    mouseLoc=(sx-(cx*sx/camx), cy*sy/camy)
    mouse.position=mouseLoc 
    while mouse.position!=mouseLoc:
        pass
cv2.imshow("cam",img)
cv2.waitKey(5)
Python

我得到这个错误:- cv2.line(img, (cx1,cy1),(cx2,cy2),(255,0,0),2)。类型错误:预期的整数参数,得到的是float。

python opencv gesture-recognition
1个回答
0
投票

cv2.line 期望坐标的值是整数,即cx1、cx2、cy1、cy2的值应该是整数。所以在写这句话之前,先写 cx1 = int(cx1) 以此类推的其他人,代码应该运行。

© www.soinside.com 2019 - 2024. All rights reserved.