首页 > 解决方案 > python3类参数错误

问题描述

我正在尝试在 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)

谢谢

注意:这个问题可能是重复的,但我看到的大多数问题都在函数 decleration 中丢失了自我,我找不到类似我的问题

标签: pythonclasspython-3.5

解决方案


这不是类的问题。您只是试图将两个单独的参数传递给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],但您对类的使用为 传递了一个整数值s

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

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

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

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

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

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

推荐阅读