Найти - Пользователи
Полная версия: Цикл for ошибка обработки изображения
Начало » Python для новичков » Цикл for ошибка обработки изображения
1
Antigr
Нужно провести манипуляции с каналами изображения, вот код:
 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)), ни преобразование во флоат не помагают?
rami
А для чего вычисляете g, а затем сразу переопределяете:
 g=np.asarray(imgg).astype('float64')
...
g=len(r[0])


 # Замените:
a=[]
# На:
a=np.zeros((len(r), len(r[0])))
scidam
Циклы в 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')



This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB