Разделите группу на другую, используя img.split()

У меня есть 24-битная картинка в формате JPEG, которой я пытаюсь манипулировать. Я хочу разделить красную полосу на зеленую (затем нормализовать от 0 до 255). Затем объедините полосы с g=0 и b=0. Я попытался с помощью методов img.split() и img.merge(), но он не работает. В конце я также хочу изменить это на 8 но. Я верю, что img.convert('L') сделает это. Может кто-нибудь, пожалуйста, помогите мне?

import Image

img = Image.open("M10.jpg")
img.convert("RGB") 

r,g,b=img.split()
p=r/g
g=g.point(lambda i:i*0)
b=b.point(lambda i:i*0)
out=Image.merge('RGB',(p,g,b))
out.show()

1 ответ

Решение
import Image

#load image, get bands and pixel arrays
img = Image.open('sample.jpg')
r,g,b = img.split()
r_array = r.load()
g_array = g.load()
b_array = b.load()
x,y = r.size

#divide red band by green band (+1 to prevent divide by 0)
for i in xrange(x):
  for j in xrange(y):
    r_array[i, j] /= (g_array[i, j] + 1)

#normalize red band, set green and blue to 0
scalar = 255.0 / r.getextrema()[1]
for i in xrange(x):
  for j in xrange(y):
    r_array[i, j] *= scalar
    g_array[i, j] = 0 
    b_array[i, j] = 0 

#merge the bands
img = Image.merge('RGB', (r, g, b)) 
img = img.convert("P", palette=Image.ADAPTIVE, colors=8)
img.show()

Я не уверен, что это то, что вы пытаетесь достичь, надеюсь, это поможет.

Другие вопросы по тегам