Форум сайта python.su
0
Нужно провести манипуляции с каналами изображения, вот код:
import numpy as np from PIL import Image image=Image.open('E://test.jpg') imgr,imgg,imgb=image.split() r=np.asarray(imgr).astype('float64') g=np.asarray(imgg).astype('float64') b=np.asarray(imgb).astype('float64') d=len(r) g=len(r[0]) a=[] for i in range(d): for j in range(g): a[i][j]=b[i][j]-r[i][j]
Отредактировано Antigr (Июнь 26, 2018 18:02:41)
Офлайн
72
А для чего вычисляете g, а затем сразу переопределяете:
g=np.asarray(imgg).astype('float64') ... g=len(r[0])
# Замените: a=[] # На: a=np.zeros((len(r), len(r[0])))
Офлайн
35
Циклы в Python весьма медленные, поэтому целесообразнее воспользоваться векторно-матричными вычислениями numpy.
Приблизительно так:
img = Image.open('yourfile.jpg') im_asarray = np.array(img) red_minus_blue_channel = im_asarray[:, :, 2] - im_asaray[:, :, 0] # now u can save you channel as a separate image new_img = Image.fromarray(red_minus_blu_channel, 'L') new_img.save('newfile.jpg')
Офлайн