如何更改图像中指定像素的颜色?

时间:2019-06-12 20:00:34

标签: python-3.x image-processing

我希望能够根据其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 个答案:

答案 0 :(得分:3)

您会发现使用Python循环遍历图像确实很慢,并且应该养成使用Numpy或优化的OpenCV或skimage代码的习惯。

因此,从这张图片开始:

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

答案 1 :(得分:0)

它看起来像一个小错误:

代替:pixelMap[i,j]= (255,255,255)
使用:pixelsNew[i,j] = (255,255,255)