Jul*_*ise 2 python python-imaging-library python-2.7
是否有一种已知的解决方案可以使用 PIL(或 Scipy)将图像从具有 3 个通道(RGB)转换为只有一个通道
我尝试Grayscale
按照下面的代码将图像转换为 png 并保存为 png,图像仍然有 3 个颜色通道。
from glob import glob
import os
import os.path
from PIL import Image
SIZE = 32, 32
# set directory
# os.chdir('..data/unprocessed_cats')
# filter all jpg and png images
IMAGE_FILES = glob('../data/validation/cats/*.jpg')
IMAGE_COUNTER = 1
print IMAGE_FILES
# iterate over files
for image_file in IMAGE_FILES:
# open file and resize
try:
im = Image.open(image_file)
except:
pass
im = im.resize(SIZE, Image.ANTIALIAS)
# save locally
output_filename = "%s.png" % IMAGE_COUNTER
# Grayscale
im.convert('LA').save(os.path.join('../data/validation', 'cats_processed', output_filename), "PNG")
# incriment image counter
IMAGE_COUNTER = IMAGE_COUNTER + 1
Run Code Online (Sandbox Code Playgroud)
我尝试只使用,im.convert('L')
但用黑色代替了透明度(将我的整个图像变成黑色)。
我发现使用 PIL 从任何图像中删除透明度/alpha 中的以下代码非常有用(全部归功于 Humphrey):
def remove_transparency(im, bg_colour=(255, 255, 255)):
# Only process if image has transparency
if im.mode in ('RGBA', 'LA') or (im.mode == 'P' and 'transparency' in im.info):
# Need to convert to RGBA if LA format due to a bug in PIL
alpha = im.convert('RGBA').split()[-1]
# Create a new background image of our matt color.
# Must be RGBA because paste requires both images have the same format
bg = Image.new("RGBA", im.size, bg_colour + (255,))
bg.paste(im, mask=alpha)
return bg
else:
return im
Run Code Online (Sandbox Code Playgroud)
首先去除透明度,然后将其转换im.convert('L')
为灰度模式:
im = remove_transparency(im).convert('L')
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
8985 次 |
最近记录: |