from PIL import Image


def convolution(input_image, image_filter):
    width, height = input_image.size
    output_image = Image.new("RGB", (width, height))

    for x in range(width):
        for y in range(height):
            red, green, blue = 0, 0, 0
            div = 0
            filter_from = -int(len(image_filter[0])/2)
            filter_to = len(image_filter[0]) + filter_from
            for i in range(filter_from, filter_to):
                for j in range(filter_from, filter_to):
                    if x + i > 0 and x + i < width-1 and y + j > 0 and y + j < height-1:
                        neighbor_pixel = input_image.getpixel((x + i, y + j))
                        red += image_filter[i + 1][j + 1] * neighbor_pixel[0]
                        green += image_filter[i + 1][j + 1] * neighbor_pixel[1]
                        blue += image_filter[i + 1][j + 1] * neighbor_pixel[2]
                        div += image_filter[i + 1][j + 1]
            if div > 0:
                red = int(red/div)
                blue = int(blue/div)
                green = int(green/div)
            output_image.putpixel((x, y), (red, green, blue))

    output_image.save("moucha3.jpg")
    output_image.close()
    input_image.close()

# moucha3.jpg
odsumeni = [[1, 2, 1],  [2, 5, 2],  [1, 2, 1]]
# moucha1.jpg
sum = [[2, 4, 5, 4, 2], [4, 9, 12, 9, 4], [5, 12, 15, 12, 5], [4, 9, 12, 9, 4], [2, 4, 6, 4, 2]]
# moucha2.jpg
hrany = [[0, 1, 0],  [1, -4, 1],  [0, 1, 0]]
# convolution(Image.open("pop.jpg"), sum)
convolution(Image.open("moucha.jpg"), odsumeni)

