首页 > 解决方案 > 如何更改图像中指定像素的颜色?

问题描述

我希望能够根据它们的 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()

标签: python-3.ximage-processing

解决方案


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

所以,从这张图片开始:

在此处输入图像描述

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')

在此处输入图像描述


推荐阅读