Как изменить цвет указанных пикселей на изображении? - PullRequest
2 голосов
/ 12 июня 2019

Я хочу иметь возможность обнаруживать определенную область пикселей на основе их значений RGB и изменять их на другой цвет (не черный / белый).

Я пытался изменить эти значения в коде, но мои результирующие изображения всегда показывают черные пиксели, заменяя указанные места: pixelMap[i,j]= (255,255,255)

from PIL import Image
im  = Image.open('Bird.jpg')
pixelMap = im.load()

img = Image.new(im.mode, im.size)
pixelsNew  = img.load()

for i in range(img.size[0]):
    for j in range(img.size[1]):
        toup = pixelMap[i,j]
        if(int(toup[0]>175) and int(toup[1]<100 and int(toup[2])<100) ):
             pixelMap[i,j]= (255,255,255)
        else:
             pixelsNew[i,j] = pixelMap[i,j]
img.show()

Ответы [ 2 ]

3 голосов
/ 12 июня 2019

Вы обнаружите, что перебор изображений с петлями Python действительно медленный и должен привыкнуть к использованию Numpy или оптимизированного кода OpenCV или лыжного мага.

Итак, начиная с этого изображения:

enter image description here

from PIL import Image
import numpy as np

# Open image
im = Image.open('bird.jpg')

# Make into Numpy array
imnp = np.array(im)

# Make all reddish pixels white
imnp[(imnp[:,:,0]>170) & (imnp[:,:,1]<100) & (imnp[:,:,2]<100)] = [255,255,255] 

 # Convert back to PIL and save
Image.fromarray(imnp).save('result.jpg')

enter image description here

0 голосов
/ 12 июня 2019

Это похоже на крошечную ошибку:

Вместо: pixelMap[i,j]= (255,255,255)
Использование: pixelsNew[i,j] = (255,255,255)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...