import numpy as np
import cv2

def rgb2gray(A):
    filas = len(A)
    columnas = len(A[0])
    B = np.zeros((filas,columnas))
    for i in range(filas):
        for j in range(columnas):
            B[i][j] = (A[i][j][0]*0.07 + A[i][j][1]*0.72 + A[i][j][2]*0.21)
    return B


imagen_i = cv2.imread("imagen.jpg")
imagenrgb2gray = rgb2gray(imagen_i)
cv2.imwrite("Imagen_escala_de_grises.jpg",imagenrgb2gray)

imagen_2 = cv2.imread('paisaje.jpg')
imagen_2 = cv2.resize(imagen_2, (512, 256))
imagen2rgb2gray = rgb2gray(imagen_2)
cv2.imwrite('Imagen_paisaje_escala_de_grises.jpg', imagen2rgb2gray)


#Funcion que calcula la matriz resultante C despues de aplicar la operacion convolucion de A*B
def convolucion(A, B):
    C_filas = len(A) - len(B) + 1
    C_columnas = len(A[0]) - len(B[0]) + 1
    C = np.zeros((C_filas, C_columnas))
    for i in range(len(C)):
        for j in range(len(C[0])):
            suma = 0
            for n in range(len(B)):
                for m in range(len(B[0])):
                    suma += A[n + i][m + j] * B[n][m]
            if suma > 255:
                C[i][j] = 255
            else:
                C[i][j] = suma
    return C

#filtro = [[3, 4, 2], [1, 0, 1], [2, 3, 1]]
filtro = [[1, 1, 1], [1, 1, 1], [1, 1, 1]]
res_sinpadd = convolucion(imagenrgb2gray, filtro)
cv2.imwrite('imagen_convolucion_sin_padding.jpg', res_sinpadd)
res_sinpadd2 = convolucion(imagen2rgb2gray, filtro)
cv2.imwrite('imagen_paisaje_convolucion_sin_padding.jpg', res_sinpadd2)
