我正在使用 PIL 拍摄一张黑色背景的图像,然后用它制作一个蒙版。我想让程序做的是遍历图像中的所有像素,如果像素是黑色,则将其设为白色,如果是任何其他颜色,则将其设为黑色,但我不确定如何适本地比较像素值以确定什么与像素有关。
到目前为止,这是我创建全黑图像的代码。
import os, sys
import Image
filename = "C:\Users\pdiffley\Dropbox\C++2\Code\Test\BallSpriteImage.bmp"
height = 50
width = 50
im = Image.open(filename)
im = im.load()
i = 0
j = 0
while i<height:
while j<width:
if im[j,i] == (0,0,0):
im[j,i] = (255,255,255)
else:
im[j,i] = (0,0,0)
j = j+1
i = i+1
mask = Image.new('RGB', (width, height))
newfile = filename.partition('.')
newfile = newfile[0] + "Mask.bmp"
mask.save(newfile)
我认为问题在于将 im[j,i] 与 RGB 值 (0,0,0) 进行比较的 if 语句,该语句的计算结果始终为 false。比较像素的正确方法是什么?
最佳答案
像素数据比较正确。但是逻辑上有两个问题:
- 完成一行后,应将 j 重置为 0。
- 您正在修改对象“im”,但写的是“mask”。
这应该有效(只要您没有 alpha channel - 正如 andrewdski 指出的那样):
img = Image.open(filename)
im = img.load()
i = 0
while i<height:
j = 0
while j<width:
if im[j,i] == (0,0,0):
im[j,i] = (255,255,255)
else:
im[j,i] = (0,0,0)
j = j+1
i = i+1
newfile = filename.partition('.')
newfile = newfile[0] + "Mask.png"
img.save(newfile)
关于python - 你如何比较像素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6088664/