2

Я использую следующий код для разделения зеленого канала изображения на отдельный .jpeg с использованием PIL и numpy.Более быстрый способ разделения зеленого канала изображения

from PIL import Image 
import numpy as np 

im = Image.open('image.jpg') 
im = np.array(im) 
im[:,:,0] *=0 
im[:,:,2] *=0 
im = Image.fromarray(im,'RGB') 
im.save('greened.jpg') 

Код работает нормально, но для выполнения серии изображений требуется цикл в секунду.

Есть ли другой способ сделать то же самое быстрее?

+1

свой код. Что занимает много времени? Мое предположение, 'im.save'. Если это так, нет шансов сделать ваш код быстрее. – Daniel

ответ

2

Вы можете назначить нули в один присест, и даже не нужно умножить на 0 -

im[:,:,[0,2]] = 0 
+1

О, вы сделали программу на полмиллиона быстрее. – Daniel

1

Если вы можете использовать OpenCV вы можете ускорить его, избегая строительства Numpy массива и преобразования обратно в изображение ,

Я пробовал:

Это заняло 0.011458 секунду в среднем (10).

@tm_it 
def with_PIL(): 
    im = imag.open('C:/Users/srlatch/Desktop/shi.jpg') 
    im = np.array(im) 
    im[:,:,0] *=0 
    im[:,:,2] *=0 
    im = imag.fromarray(im,'RGB') 
    im.save('greened.jpg') 

Это заняло 0.000474981 секунду на средней (10):

@tm_it 
def with_open_cv(): 
    image=cv2.imread('C:/Users/srlatch/Desktop/shi.jpg') 
    image[:,:,[0,2]] = 0 
    cv2.imwrite('result.jpg',image)