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

时间:2015-09-04 11:18:16

标签: python arrays numpy hsv

我有很多HSV图像数据:

形状:

(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或V> 200")并根据该过滤器修改数组,以便我可以将HSV值设置为我需要的值,例如[0 0 0]。

我无法绕过索引系统,应该如何处理这个问题?

2 个答案:

答案 0 :(得分:1)

您创建一个遮罩数组以选择要更改的元素:

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

答案 1 :(得分:1)

假设newvals = np.array([127,64,100]) mask = (hsv[:,:,0] < 20) | (hsv[:,:,2]> 200) hsv.reshape(-1,3)[mask.ravel()] = newvals 为输入hsv图像数据,您可以使用一些reshapingboolean indexing将所有三个频道设置为通用三元组,如此 -

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)

示例运行 -

{{1}}