Skip to content

Instantly share code, notes, and snippets.

@xsbee
Created July 21, 2022 06:00
Show Gist options
  • Save xsbee/40f344194dc4a93387d8754e9c4aee47 to your computer and use it in GitHub Desktop.
Save xsbee/40f344194dc4a93387d8754e9c4aee47 to your computer and use it in GitHub Desktop.
Arbitrarily-sized image convolution using SciPy
import numpy
from PIL import Image
from sys import argv
from scipy import ndimage
target = Image.open(argv[1])
kernel = Image.open(argv[2])
# Kernel [must] be grayscale.
assert kernel.mode == 'L'
target_np = numpy.asarray(target)
kernel_np = numpy.asarray(kernel)
kernel_np = kernel_np / numpy.sum(numpy.sum(kernel_np, axis=0), axis=0)
for index, band in enumerate(target.getbands()):
ndimage.convolve(
target_np[:,:,index],
kernel_np,
output=target_np[:,:,index])
Image.fromarray(numpy.uint8(target_np)) \
.save(argv[3])
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment