如何修改 HSV 图像数据的 numpy 数组中的像素值?

How to modify pixel values in numpy array of HSV image data?

我有 HSV 图像数据的 numpy 数组:

形状:

(960, 1280, 3)

数据:

 [[ 90  53  29]
  [ 90  53  29]
  [ 68  35  29]
  ..., 
  [ 66  28 146]
  [ 58  21 145]
  [ 58  21 145]]

 [[ 90  53  29]
  [ 90  53  29]
  [ 75  35  29]
  ..., 
  [ 65  31 148]
  [ 69  18 144]
  [ 69  18 144]]]

我想创建一个过滤器(例如 "H < 20 or V > 200")并基于该过滤器修改数组,以便我可以将 HSV 值设置为我需要的值,例如 [0 0 0]。

我对索引系统一头雾水,应该如何处理?

您创建一个掩码数组来选择您要更改的元素:

H = image[:,:,0]
V = image[:,:,2]
mask = (H < 20) & (V > 200)
image[mask] = 0

假设 hsv 作为输入 hsv 图像数据,您可以使用一些 reshaping alongwith boolean indexing 将所有三个通道设置为通用三元组,就像这样 -

newvals = np.array([127,64,100])

mask = (hsv[:,:,0] < 20) | (hsv[:,:,2]> 200)
hsv.reshape(-1,3)[mask.ravel()] = newvals

样本运行-

In [13]: hsv
Out[13]: 
array([[[155, 179, 207],
        [200,  52, 185],
        [241, 139, 232],
        [188, 149, 117]],

       [[145, 169, 116],
        [146, 134, 108],
        [ 74,  34, 121],
        [  9, 190,  91]],

       [[240, 207, 228],
        [140, 158, 124],
        [179, 154, 212],
        [ 79, 166, 131]]], dtype=uint8)

In [14]: newvals = np.array([127,64,100])
    ...: mask = (hsv[:,:,0] < 20) | (hsv[:,:,2]> 200)
    ...: hsv.reshape(-1,3)[mask.ravel()] = newvals

In [15]: hsv
Out[15]: 
array([[[127,  64, 100],
        [200,  52, 185],
        [127,  64, 100],
        [188, 149, 117]],

       [[145, 169, 116],
        [146, 134, 108],
        [ 74,  34, 121],
        [127,  64, 100]],

       [[127,  64, 100],
        [140, 158, 124],
        [127,  64, 100],
        [ 79, 166, 131]]], dtype=uint8)