2017-04-26 32 views
1

我有一個圖像,像素中的某些顏色通道的值爲零(即255,146,0)。我希望能夠將數組中的任何值等於零更改爲不同的值,但我不知道如何訪問這些值。任何幫助?如何使用numpy更改圖像中的顏色通道?

這是圖像陣列:

[[[ 76 163 168] 
    [109 166 168] 
    [173 172 167] 
    ..., 
    [ 83 182 144] 
    [ 78 172 134] 
    [ 82 150 131]] 

[[ 51 151 168] 
    [ 99 157 171] 
    [173 195 159] 
    ..., 
    [ 56 165 144] 
    [ 25 198 125] 
    [ 35 185 121]] 

[[ 76 163 121] 
    [112 147 120] 
    [175 151 118] 
    ..., 
    [ 57 162 159] 
    [ 36 185 132] 
    [ 32 194 97]] 

..., 
[[ 78 189 126] 
    [ 68 173 129] 
    [ 58 171 150] 
    ..., 
    [ 41 188 163] 
    [ 34 176 126] 
    [ 35 176 102]] 

[[131 155 161] 
    [101 141 161] 
    [ 42 151 177] 
    ..., 
    [ 56 178 122] 
    [ 45 192 114] 
    [ 46 184 112]] 

[[130 157 185] 
    [ 83 141 185] 
    [ 42 158 185] 
    ..., 
    [ 63 187 88] 
    [ 45 194 102] 
    [ 45 184 129]]] 
+0

爲你所做的發佈解決方案的工作? – Divakar

回答

0

使用masking -

img[(img==zero_val).all(-1)] = new_val 

,其中zero_valzero顏色和new_val是新的顏色,在那些我們有zero地方分配彩色像素。

採樣運行 -

# Random image array 
In [112]: img = np.random.randint(0,255,(4,5,3)) 

# Define sample zero valued and new valued arrays 
In [113]: zero_val = [255,146,0] 
    ...: new_val = [255,255,255] 
    ...: 

# Set two random points/pixels to be zero valued 
In [114]: img[0,2] = zero_val 

In [115]: img[2,3] = zero_val 

# Use proposed approach 
In [116]: img[(img==zero_val).all(-1)] = new_val 

# Verify that new values have been assigned 
In [117]: img[0,2] 
Out[117]: array([255, 255, 255]) 

In [118]: img[2,3] 
Out[118]: array([255, 255, 255])