python3 class 参数错误

python3 class argument error

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

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)

谢谢

注意:这个问题可能是重复的,但我看到的大多数问题都在函数 decleration 中缺少自我,我找不到像我的问题

这不是 classes 的问题。您只是想将两个单独的参数传递给 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 被视为可以在您的 class __init__ 方法中编制索引的内容:

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

    注意 s[1],但是 class 的 uses 传递了一个整数值:

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

    所以 s[1] 也会失败, TypeError: 'int' object is not subscriptable.

  • 您只是将图像作为 Thread()args 参数传入;括号不会使它成为一个元组:

    Thread(target=self.perstr, args=(image)).start()
    #                               ^^^^^^^
    

    你需要在此处添加一个逗号,否则会出现更多错误(具体取决于 image 引用的对象的类型):

    Thread(target=self.perstr, args=(image,)).start()