有没有一种方法可以测试数组中的所有数字是否都大于A,如果有,则用相同长度的数组替换

时间:2019-06-08 22:32:07

标签: python arrays numpy

我正在尝试构建一些东西来分析我的摄像头,以突出显示非黑色的像素(以自动进行一些跟踪)

我已经尝试使用OpenCV进行如下测试:np.where(np.all(img>150,2),255,0)其中img是摄像机供稿,但我想这样做: np.where(np.all(img>150,2),np.array(0,255,0),img) 因此只有被发现为“非黑色”的图片是绿色,而其他与以前相同,而不是白色或黑色。

import numpy as np
import cv2

camera = cv2.VideoCapture(0)
while 1:
    ret_val, image = camera.read()
    if not ret_val:
        cv2.destroyAllWindows()
        camera.release()
        break
    img=image[len(image)//2:len(image)]
    A=np.where(np.all(img>150,2),255,0)
    cv2.imshow("output", np.uint8(A))

我想将A作为数组(n,m,3)而不是array(n,m),其中n,m是长度和宽度 预先感谢。

1 个答案:

答案 0 :(得分:0)

如果我理解正确,您希望将“非黑色”像素转换为绿色(其中“非黑色”表示R,G和B值均大于150)。

您的问题的简单答案是将其替换为

A=np.where(np.all(img>150,2),255,0)

使用

A = img.copy()
A[np.where(np.all(A > 150, 2))] = np.array([0, 255, 0])

np.where(np.all(A > 150, 2))返回所有“非黑色”像素的索引,因此您要为这些索引分配值[0,255,0]。其他所有像素均保持不变。

如果您可以修改img,也可以就地执行此操作以避免创建另一个数组:

img[np.where(np.all(img > 150, 2))] = np.array([0, 255, 0])