在课程

时间:2018-06-11 08:42:29

标签: python class

我真的需要一些帮助来理解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>

我迷路了!在这个基本的东西上需要一些帮助。 如何在类中定义一个对象并赋予它由数组方法(位于同一类中的方法)使用的权限?

1 个答案:

答案 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个对象。