2016-10-26 3 views
1

В настоящее время я использую следующий код для преобразования всех без черных точек на бел:Как ускорить этот код с помощью Numpy?

def convert(self, img): 
    for i in range(img.shape[0]): 
     for j in range(img.shape[1]): 
      if img.item(i, j) != 0: 
       img.itemset((i, j), 255) 
    return img 

Как я могу ускорить его?

ответ

2

Все элементы, которые не 0 должны изменить до 255:

a[a != 0] = 255 
0

Как об использовании PIL и сделать функцию, как это:

def convert (self,image): 
    return image.convert('1') 

Код испытания:

from PIL import Image 
import matplotlib.pyplot as plt 

def convert (image): 
    return image.convert('1') 

img = Image.open('./test.png') 
plt.figure(); plt.imshow(img) 
BW = convert(img) 
plt.figure(); plt.imshow(BW) 
plt.show() 

результат:

enter image description here enter image description here

И кстати, в случае, если вы нуждались в Numpy массив объекта изображения PIL, вы можете легко получить его с помощью:

matrix_of_img = numpy.asarray(img.convert('L'))