2016-04-29 54 views
0

我有一个我想修改的数组(称为'img')。基于逻辑更改数组内部的值 - Python

img 
array([[[244, 244, 244], 
    [248, 248, 248], 
    [249, 249, 249], 

我想的数组中的值改变为0,如果它们低于200,并转换为255,如果它们是高于或等于200:

for value in img: 
    if value < 200: 
     value = 0 
    else: 
     value = 255 

然而,我正在此错误:

ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all() 

我该如何获得此代码的工作?

+0

您正在通过IMG变量,它是一个二维列表迭代一些事情。所以'价值'也是一个列表。 – Pete

回答

0

简单的解决方案使用Numpy where方法。传递逻辑作为第一个参数,如果是True(第二个参数),如果是False(第三个参数)。

img = np.where(img<200.0, 0.0, 255.0) 
1

您可以使用boolean arraynp.where

np.where(img<200, 0, 255) 

对于您所提供的所有值都在200以上这个例子,它会返回255所有的时间,但对于245:

np.where(img<245, 0, 255) 
Out[4]: 
array([[[ 0, 0, 0], 
     [255, 255, 255], 
     [255, 255, 255]]]) 
0

如果IMG是一个3维列表

如果要使用循环尝试这样

for two_dim_array in img: 
    for one_dim_array in two_dim_array: 
     for i in range(len(one_dim_array)): 
      if(one_dim_array[i]<200): 
       one_dim_array[i]=0 
      else: 
       one_dim_array[i]=255