-1

我在windows上使用opencv。此错误仅在检测到绿色后发生(这显然是代码的任务)。代码:

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)=(640,480)

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,(640,480))

    #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



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=int(x1+w1/2)
    cy1=int(y1+h1/2)
    cx2=int(x2+w2/2)
    cy2=int(y2+h2/2)
    cx=int((cx1+cx2)/2)
    cy=int((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=int(x+w/2)
    cy=int(y+h/2)
    cv2.circle(img,(cx,cy),int((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)

错误:

Traceback (most recent call last):

  File "virtual_mouse.py", line 65, in <module>
    mouse.position = mouseLoc

File "C:\Users\dell\Anaconda3\envs\kj\lib\site-packages\pynput\mouse\_base.py", line 65, in position
    self._position_set(pos)

File "C:\Users\dell\Anaconda3\envs\kj\lib\site-packages\pynput\mouse\_win32.py", line 66, in _position_set
    self.__SetCursorPos(*pos)
ctypes.ArgumentError: argument 1: <class 'TypeError'>: Don't know how to convert parameter 1
4

1 回答 1

0

如果您使用的是 openCV3,则该公式mouseLoc = (sx-(cx*sx/camx), cy*sy/camy)将返回 iPython 控制台中未显示的浮点值。因此,您必须将它们转换为整数值,这肯定会奏效。因此进行以下更改:

mouseLoc = ( int(sx-(cx*sx/camx)) , int(cy*sy/camy) )
于 2018-03-09T20:06:32.110 回答