将python中的PIL图像逐个像素地转换为灰度,仅留下1种颜色

时间:2017-04-09 20:54:49

标签: python image-processing python-imaging-library image-manipulation

我试图在python 3.4.2中将图像转换为灰度,但我想留下所有"红色"仅像素

firebase.auth().createUserWithEmailAndPassword(email, "test123")
    .then(function(user) {
    })
    .catch(function(error) {
      // Handle Errors here.
      var errorCode = error.code;
      var errorMessage = error.message;
      // ...
    });

    firebase.auth().onAuthStateChanged(firebaseUser =>{

     var ref = firebase.database().ref().child('users/' + firebaseUser.uid);
     //set something
     ref.set({/*save something to a specific uid*/});

    });

现在,这会将图像转换为灰度,但据我所知,它并没有像我想象的那样留下任何彩色像素,任何帮助/建议/替代方式来完成我的任务将不胜感激。

谢谢

1 个答案:

答案 0 :(得分:0)

因此,如果由于我的错误

将来我的代码无效,所以任何人都会读到这个
res.putpixel(pixel) 

本应该抛出一个错误,因为我没有把它放在像素只是颜色信息的位置。由于它没有抛出错误,我们从来没有真正进入我的其他:声明。

要求队友寻求帮助,我们将代码更改为:

from numpy import *
from PIL import Image

red_lower_threshold = 150
green_blue_diff_threshold = 50
def grayscale(picture):
   res = Image.new(picture.mode, picture.size)

   for i in range(0, picture.size[0]):
       for j in range(0, picture.size[1]):
           pixel = picture.getpixel((i, j))  #get a pixel
           red = pixel[0]
           green = pixel[1]
           blue = pixel[2]

           if (red > red_lower_threshold and abs(green - blue) < green_blue_diff_threshold):
               res.putpixel((i, j), pixel)
           else:
               avg = (pixel[0] + pixel[1] + pixel[2]) / 3
               res.putpixel((i, j), (int(avg), int(avg), int(avg)))

res.save('output.jpg')
return res

它不完美,但它是一个可行的解决方案