python:cv2.threshold将numpy更改为tup

2024-05-07 05:35:16 发布

您现在位置:Python中文网/ 问答频道 /正文

我处理第一个函数中的每一帧,其中我使用cv2.threshold(self.res, 10, 255, cv2.THRESH_BINARY_INV)在检测运动之前进行预处理。在下一个函数中,我只计算黑色像素的数量并计算平均值。我给cv2.threshold一个numpy数组,但它返回我tuple,当我在这里计算黑色像素时,if self.res[x,y] == 0.0:我得到了这个类型的错误tuple indices must be integers, not tuple。已经两天了,但运气不好。在

def processImage(self, frame):

        self.frame2gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
        self.res = cv2.absdiff(self.frame1gray, self.frame2gray)
        self.res = cv2.GaussianBlur(self.res, (15, 15), 0)
        kernel = np.ones((3, 3), np.uint8)
        self.res = cv2.morphologyEx(self.res, cv2.MORPH_OPEN, kernel)
        self.res = cv2.morphologyEx(self.res, cv2.MORPH_GRADIENT, kernel)
        self.res = cv2.threshold(self.res, 10, 255, cv2.THRESH_BINARY_INV)

        print "type: ",type(self.res)

def somethingHasMoved(self):

        nb=0 #Will hold the number of black pixels
        for x in range(self.height): #Iterate the hole image
            for y in range(self.width):

                if self.res[x,y] == 0.0:
                    nb += 1
        avg = (nb*100.0)/self.nb_pixels #Calculate the average of black pixel in the image
    print"average movement : ",avg
        if avg > self.threshold:#If over the ceiling trigger the alarm
            return True
        else:
            return False

Tags: the函数inselfthresholdifrescv2