Уведомления

Группа в Telegram: @pythonsu

#1 Июнь 26, 2018 17:55:18

Antigr
Зарегистрирован: 2018-05-23
Сообщения: 3
Репутация: +  0  -
Профиль   Отправить e-mail  

Цикл for ошибка обработки изображения

Нужно провести манипуляции с каналами изображения, вот код:

 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]
Как в таком случае убить ошибку TypeError: ‘int’ object is not subscriptable, если ни range(len(r)), ни преобразование во флоат не помагают?

Отредактировано Antigr (Июнь 26, 2018 18:02:41)

Офлайн

#2 Июнь 26, 2018 19:10:17

rami
Зарегистрирован: 2018-01-08
Сообщения: 281
Репутация: +  72  -
Профиль   Отправить e-mail  

Цикл for ошибка обработки изображения

А для чего вычисляете g, а затем сразу переопределяете:

 g=np.asarray(imgg).astype('float64')
...
g=len(r[0])


 # Замените:
a=[]
# На:
a=np.zeros((len(r), len(r[0])))

Офлайн

#3 Июнь 27, 2018 03:55:43

scidam
Зарегистрирован: 2016-06-15
Сообщения: 288
Репутация: +  35  -
Профиль   Отправить e-mail  

Цикл for ошибка обработки изображения

Циклы в 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')



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version