Недавно я хотел деинтерлейсировать некоторые стереоизображения, извлекая изображения для левого и правого глаза.Для этого я написал:
from PIL import Image
def deinterlace_file(input_file, output_format_str, row_names=('Left', 'Right')):
print("Deinterlacing {}".format(input_file))
source = Image.open(input_file)
source.load()
dim = source.size
scaled_size1 = (math.floor(dim[0]), math.floor(dim[1]/2) + 1)
scaled_size2 = (math.floor(dim[0]/2), math.floor(dim[1]/2) + 1)
top = Image.new(source.mode, scaled_size1)
top_pixels = top.load()
other = Image.new(source.mode, scaled_size1)
other_pixels = other.load()
for row in range(dim[1]):
for col in range(dim[0]):
pixel = source.getpixel((col, row))
row_int = math.floor(row / 2)
if row % 2:
top_pixels[col, row_int] = pixel
else:
other_pixels[col, row_int] = pixel
top_final = top.resize(scaled_size2, Image.NEAREST) # Downsize to maintain aspect ratio
other_final = other.resize(scaled_size2, Image.NEAREST) # Downsize to maintain aspect ratio
top_final.save(output_format_str.format(row_names[0]))
other_final.save(output_format_str.format(row_names[1]))
output_format_str должен выглядеть примерно так: "filename-{}.png"
где {}
будет заменено на имя строки.
Обратите внимание, что это заканчивается изображениембудучи половиной его первоначального размера.Если вы не хотите этого, вы можете изменить последний шаг масштабирования
Это не самая быстрая операция, поскольку она проходит пиксель за пикселем, но я не мог найти простой способ извлечения строк из изображения.