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 的 use 为 s
传递了一个整数值:
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()
我正在尝试在 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 的 use 为s
传递了一个整数值: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()