Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何修改HSV图像数据numpy数组中的像素值?_Python_Arrays_Numpy_Hsv - Fatal编程技术网

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

Python 如何修改HSV图像数据numpy数组中的像素值?,python,arrays,numpy,hsv,Python,Arrays,Numpy,Hsv,我拥有HSV图像数据的numpy数组: 形状: (960, 1280, 3) 数据: 我想创建一个过滤器(例如“H200”),并基于该过滤器修改数组,以便将HSV值设置为我需要的值,如[0] 我不知道该如何处理索引系统?创建一个掩码数组来选择要更改的元素: H = image[:,:,0] V = image[:,:,2] mask = (H < 20) & (V > 200) image[mask] = 0 H=image[:,:,0] V=图像[:,:,2] 掩模=(

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

形状:

(960, 1280, 3)
数据:

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


我不知道该如何处理索引系统?

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

H = image[:,:,0]
V = image[:,:,2]
mask = (H < 20) & (V > 200)
image[mask] = 0
H=image[:,:,0]
V=图像[:,:,2]
掩模=(H<20)和(V>200)
图像[掩码]=0

假设
hsv
作为输入的hsv图像数据,您可以使用一些工具将所有三个通道设置为通用三元组,如下所示-

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

mask = (hsv[:,:,0] < 20) | (hsv[:,:,2]> 200)
hsv.reshape(-1,3)[mask.ravel()] = newvals
newvals=np.array([127,64100])
掩码=(hsv[:,:,0]<20)|(hsv[:,:,2]>200)
hsv.重塑(-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)
[13]中的
:hsv
出[13]:
数组([[155179207],
[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],
[79166 131]],数据类型=uint8)
在[14]中:newvals=np.array([127,64100])
…:掩码=(hsv[:,:,0]<20)|(hsv[:,:,2]>200)
…:hsv.重塑(-1,3)[mask.ravel()]=newvals
In[15]:hsv
出[15]:
数组([[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],
[79166 131]],数据类型=uint8)
谢谢,我“知道”这一定很简单:)如果我想将其他东西定义为值,例如[127 64 100],该怎么办?
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)