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)

谢谢

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

马丁·彼得斯

这不是类的问题。您只是想将两个单独的参数传递给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()
    

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章