es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Una forma de lograr esto es utilizar la coincidencia de histograma para ajustar los niveles de contraste y brillo de la imagen para que coincida con la imagen de fondo antes de insertarla.

    Aquí hay algunos pasos a seguir:

    1. Cargar la imagen de fondo y la imagen a insertar.
    import cv2
    img_bg = cv2.imread("background_image.jpg")
    img_insert = cv2.imread("insert_image.jpg")
    
    1. Convertir ambas imágenes al espacio de color LAB que separa la luminancia (brillo) de la crominancia (información de color).
    img_bg_lab = cv2.cvtColor(img_bg, cv2.COLOR_BGR2LAB)
    img_insert_lab = cv2.cvtColor(img_insert, cv2.COLOR_BGR2LAB)
    
    1. Calcular los histogramas del canal de luminancia (L) para ambas imágenes.
    hist_bg, bins = np.histogram(img_bg_lab[:,:,0].ravel(), 256, [0,256])
    hist_insert, bins = np.histogram(img_insert_lab[:,:,0].ravel(), 256, [0,256])
    
    1. Calcular la función de distribución acumulativa (CDF) de los histogramas.
    cdf_bg = hist_bg.cumsum()
    cdf_insert = hist_insert.cumsum()
    
    1. Normalizar las CDF para que tengan la misma escala.
    cdf_bg = cdf_bg / cdf_bg[-1]
    cdf_insert = cdf_insert / cdf_insert[-1]
    
    1. Crear una tabla de búsqueda que mapee los valores de píxeles de la imagen insertada a los valores correspondientes de la imagen de fondo basándose en sus CDF.
    lookup_table = np.interp(cdf_insert, cdf_bg, bins[:-1])
    
    1. Aplicar la tabla de búsqueda al canal de luminancia de la imagen insertada.
    img_insert_lab[:,:,0] = np.uint8(lookup_table[img_insert_lab[:,:,0]])
    
    1. Convertir la imagen ajustada de nuevo al espacio de color BGR.
    img_insert = cv2.cvtColor(img_insert_lab, cv2.COLOR_LAB2BGR)
    
    1. Insertar la imagen ajustada en la imagen de fondo utilizando una máscara.
    mask = cv2.cvtColor(img_insert, cv2.COLOR_BGR2GRAY)
    mask = cv2.threshold(mask, 1, 255, cv2.THRESH_BINARY)[1]
    mask = cv2.bitwise_not(mask)
    img_bg_masked = cv2.bitwise_and(img_bg, img_bg, mask=mask)
    img_result = cv2.add(img_bg_masked, img_insert)
    
    1. Guardar la imagen resultante.
    cv2.imwrite("result_image.jpg", img_result)
    

    Ten en cuenta que este es solo un enfoque y puede haber otros métodos para lograr el resultado deseado también.

Comments are closed.