python-3.x - 如何更改图像中指定像素的颜色?
问题描述
我希望能够根据它们的 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 循环遍历图像真的很慢,应该养成使用 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')
推荐阅读
- wso2 - 如何在wso2中将文本转换为多个xml
- objective-c - 如何将数字字符串从“复杂”字符串转换为整数?
- r - 这行代码对 lm() 和 poly() 函数做了什么创建列 P$Y
- java - 尝试在空对象引用上调用虚拟方法 'java.lang.String
- excel - 列出从 sql 搜索到 Excel 的值
- c# - C#:如何在不装箱或拆箱的情况下使用反射设置具有值类型的属性?
- c# - 在旧(2014.4.18.0)VLC 媒体播放器中的视频轨道 2 中播放视频 - 设置视频轨道
- laravel - 数据表可以显示数据/结果,但有时(通常)在加载或搜索数据时会出现错误 404
- python - beautifulsoup:获取 html 标签内的内容
- hybrid-mobile-app - 如何在cordova插件中进行自定义?