我正在尝试在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)
谢谢
注意:这个问题可能是重复的,但是我看到的大多数问题是函数束缚中缺少自我,我找不到像我这样的东西
答案 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