如何在python中使用逻辑索引替换for循环中的图像掩码?

时间:2017-11-04 10:59:34

标签: python numpy opencv indexing

我试图通过颜色跟踪视频中的对象。我可以简化这段代码:

while True:
    ret, frame = cap.read()
    if not ret:
        break
    height, width, channel = frame.shape
    hue = cv2.cvtColor(frame, cv2.COLOR_RGB2HSV)
    for i in range(width):
        for j in range(height):
            if (hue[j, i, 0] < 110 or hue[j, i, 0] > 140):
                hue[j, i, 0] = 0
                hue[j, i, 1] = 0
                hue[j, i, 2] = 0

1 个答案:

答案 0 :(得分:0)

使用masking删除两个嵌套的for循环,如此 -

hue[(hue[...,0] < 110) | (hue[...,0] >140)]  = 0

这是有效的,因为使用(hue[...,0] < 110) | (hue[...,0] >140)创建的掩码与hue的前两个dims具有相同的形状,并且用于屏蔽hue,因为它沿着第一个进行索引它的两个模糊,适用于沿最后一个轴的所有元素。这可以完成三个步骤的任务:hue[j, i, 0] = 0; hue[j, i, 1] = 0; hue[j, i, 2] = 0;一次完成。