python3类参数错误

时间:2018-08-28 13:25:48

标签: python class python-3.5

我正在尝试在python 3.5中创建一个类 这是课程文件

import numpy as np
import cv2
from threading import Thread

class perstrans:
    def __init__(self,a,img,s):
        self.name=a
        self.imx = img.shape[1]
        self.imy = img.shape[0]
        self.src = np.float32(
            [[28, 198], [252, 198], [203, 140], [79, 141]],
            [[28, 198], [252, 198], [203, 140], [79, 141]])
        self.dst = np.float32(
            [[0, imy],
             [imx, imy],
             [imx, 0],
             [0, 0]])
        self.pmat = cv2.getPerspectiveTransform(self.src[s[1]], self.dst)
        return None
    def transfer(self,image):
        Thread(target=self.perstr, args=(image)).start()

    def perstr(self,imaga):
        self.h, self.w = imaga.shape[:2]
        self.res = cv2.warpPerspective(imaga, m, (w,h), flags=cv2.INTER_LINEAR)
        return self

    def getres(self):
        return self.res

但是当我像这样初始化它时,出现以下错误

import cv2
import numpy as np
import perstrans
cap = WebcamVideoStream(0).start()
img = cap.read()   
img = cv2.resize(img,(resizex,resizey))
h, w = img.shape[:2]
trns=perstrans.perstrans("angle",img,0)
....


Traceback (most recent call last):
  File "main.py", line 39, in <module>
    trns=perstrans.perstrans("angle",img,0)
  File "/home/huzeyfe/Desktop/robotaksi data/line tracking/duzenlenmis/v2/perstrans.py", line 12, in __init__
    [[28, 198], [252, 198], [203, 140], [79, 141]])
TypeError: function takes at most 1 argument (2 given)

谢谢

注意:这个问题可能是重复的,但是我看到的大多数问题是函数束缚中缺少自我,我找不到像我这样的东西

1 个答案:

答案 0 :(得分:0)

这不是类的问题。您只是想将两个单独的参数传递给np.float32()

np.float32(
    [[28, 198], [252, 198], [203, 140], [79, 141]],
    [[28, 198], [252, 198], [203, 140], [79, 141]])

仔细观察。这是列表[[28, 198], [252, 198], [203, 140], [79, 141]]的两倍。 np.float32()仅接受一个单个参数。

更正该行以传递一个参数。

那不是您的代码在那之后会工作;还有更多问题:

  • s被视为可以在您的类__init__方法中建立索引的东西:

    self.pmat = cv2.getPerspectiveTransform(self.src[s[1]], self.dst)
    #                                                ^^^^
    

    请注意s[1],但是您在该类的 use 会为s传递一个整数值:

    trns=perstrans.perstrans("angle",img,0)
    #                                    ^
    

    因此s[1]也将失败,并带有TypeError: 'int' object is not subscriptable

  • 您只传递图像作为args的{​​{1}}参数;括号不能使它成为一个元组:

    Thread()

    您将需要在其中添加一个逗号,否则会出现更多错误(确切的内容取决于Thread(target=self.perstr, args=(image)).start() # ^^^^^^^ 所引用的对象的类型):

    image