Python 在numpy中选择满足多种条件的rgb图像像素

Python 在numpy中选择满足多种条件的rgb图像像素,python,python-3.x,numpy,image-processing,python-3.7,Python,Python 3.x,Numpy,Image Processing,Python 3.7,我正在尝试做视频处理,我希望能够有效地获得所有像素,红色高于100,绿色低于100,蓝色低于100。我试着使用for循环,对每个像素进行3次评估,但速度太慢,每帧耗时13秒。我目前正在使用cv2获取图像,并且有 retval = np.delete(frame, (0, 1), 2) #extracts just red of the pixels retval = np.argwhere(retval>100) #extracts where red is above 100 retva

我正在尝试做视频处理,我希望能够有效地获得所有像素,红色高于100,绿色低于100,蓝色低于100。我试着使用for循环,对每个像素进行3次评估,但速度太慢,每帧耗时13秒。我目前正在使用cv2获取图像,并且有

retval = np.delete(frame, (0, 1), 2) #extracts just red of the pixels
retval = np.argwhere(retval>100) #extracts where red is above 100
retval = np.delete(retval, 2, 1) #removes the actual color value, leaving it as coordinates
这就给了我一个红色值大于100的部分解决方案,但它也包括棕色和白色,这是不理想的。这个循环需要非常快地发生,这就是为什么我想使用numpy,但我不确定要使用什么命令。任何帮助都将不胜感激。 “帧”数组的结构如下所示,格式为BGR,而不是RGB。第一个索引是x坐标,第二个索引是y坐标,第三个索引是0、1或2,对应于蓝色、绿色和红色

[[[255,   0,   0],
  [255,   0,   0],
  [255,   0,   0],
  ...,
  [  8,  20,   8],
  [ 12,  15,  20],
  [ 16,  14,  26]],

  [[255,   0,   0],
  [ 37,  27,  20],
  [ 45,  36,  32],
  ...,
  [177, 187, 157],
  [180, 192, 164],
  [182, 193, 167]]]

尝试制作三个布尔掩码,每个条件一个,然后将它们与
np.logical\u和

im = #define the image suitably 
mask = np.logical_and.reduce((im[:,:,0]<100,im[:,:,1]<100,im[:,:,2]>100))
im[mask] # returns all pixels satisfying these conditions
然后,像素值是

im[i,j] 

返回无效的坐标,例如第一个是
[68,80,80]
这些不是坐标。它们是像素值。但这些像素值不符合令人困惑的要求。发布一个示例图像?哦,我明白了。我认为np.bitwise_一次只需要两个数组。我来编辑。有趣的是,考虑到我使用的图像,它对我很有效。
im[i,j]