我希望能够根据其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()
答案 0 :(得分:3)
您会发现使用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')
答案 1 :(得分:0)
它看起来像一个小错误:
代替:pixelMap[i,j]= (255,255,255)
使用:pixelsNew[i,j] = (255,255,255)