#python #performance #numpy #image-processing #python-imaging-library
#python #Производительность #numpy #обработка изображений #python-imaging-library
Вопрос:
Я использую следующий код, чтобы отделить зеленый канал изображения в отдельный файл .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
. Если это так, нет возможности ускорить ваш код.
Ответ №1:
Вы могли бы назначить нули за один раз, и вам даже не нужно будет умножать на 0
—
im[:,:,[0,2]] = 0
Комментарии:
1. О, вы сделали программу на полмиллиона секунд быстрее.
Ответ №2:
Если вы можете использовать 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)