我有很多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]。
我无法绕过索引系统,应该如何处理这个问题?
答案 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图像数据,您可以使用一些reshaping
和boolean 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}}