我真的需要一些帮助来理解Python和类。
我用几种方法定义了一个ImageProcessing类。
class ImageProcessing:
"""
Class containing different processing operations
"""
def __init__(self, name, height, width):
""" Defining name, height and width of image processing object """
self.name = name
self.height = height
self.width = width
# several methods here with def.
# These methods mainly used some open cv operations.
def masking(self):
""" Method to mask | All masks are applied manually
- self MUST BE a numpy array or a scalar
"""
mask = cv2.rectangle(self, (0,0), (250,1200), (0,0,0), -1)
return(mask)
当我创建一个对象时,它被定义为属于ImageProcessing Class。
diff = ImageProcessing("diff",1200,1600)
diff = diff.masking()
因此这个名为“diff”的对象无法使用我的其他方法,例如在我的类ImageProcessing中定义的屏蔽,因为这些方法正在等待使用标量或数组,而我的对象的类型是ImageProcessing。 / p>
我迷路了!在这个基本的东西上需要一些帮助。 如何在类中定义一个对象并赋予它由数组方法(位于同一类中的方法)使用的权限?
答案 0 :(得分:0)
您正尝试在新ImageProcessing
对象上使用需要Numpy数组(或标量)的函数。这就像试图修饰帽子一样 - 这没有意义。
实际上,您编写的函数的文档字符串指定输入必须是Numpy数组或标量。
您可以尝试在函数中创建Numpy数组:
import numpy as np
def masking(self):
new_numpy_array = np.empty((self.width, self.height))
mask = cv2.rectangle(new_numpy_array, (0,0), (250,1200), (0,0,0), -1)
return(mask)
或者,如果您可能会做很多这样的事情,您可以在对象的同时创建Numpy数组:
import numpy as np
def __init__(self, name, height, width):
""" Defining name, height and width of image processing object """
self.name = name
self.height = height
self.width = width
self.numpy_repr = np.empty((width, height))
def masking(self):
mask = cv2.rectangle(self.numpy_repr, (0,0), (250,1200), (0,0,0), -1)
return(mask)
在任何一种情况下,diff = diff.masking()
都不会以您希望的方式运行,因为cv2.rectangle(...)
会返回一个数组,而不是ImageProcessing
个对象。