Saltar al contenido

¿Cómo puedo enfocar una imagen en OpenCV?

Solución:

Un procedimiento general se describe en el artículo de Wikipedia sobre el enmascaramiento de enfoque:

Utiliza un filtro de suavizado gaussiano y resta la versión suavizada de la imagen original (de forma ponderada para que los valores de un área constante permanezcan constantes).

Para obtener una versión mejorada de frame dentro image: (ambos cv::Mat)

cv::GaussianBlur(frame, image, cv::Size(0, 0), 3);
cv::addWeighted(frame, 1.5, image, -0.5, 0, image);

Los parámetros hay algo que debe ajustar usted mismo.

También está el afilado laplaciano, deberías encontrar algo en eso cuando busques en Google.

Puedes probar un simple núcleo y el filter2D función, por ejemplo, en Python:

kernel = np.array([[-1,-1,-1], [-1,9,-1], [-1,-1,-1]])
im = cv2.filter2D(im, -1, kernel)

Wikipedia tiene una buena descripción general de los núcleos con algunos ejemplos más aquí: https://en.wikipedia.org/wiki/Kernel_(image_processing)

En el procesamiento de imágenes, un núcleo, una matriz de convolución o una máscara es una matriz pequeña. Se utiliza para difuminar, afilar, grabar en relieve, detectar bordes y más. Esto se logra haciendo una convolución entre un kernel y una imagen.

Puede enfocar una imagen usando una máscara de enfoque. Puede encontrar más información sobre el enmascaramiento de enfoque aquí. Y aquí hay una implementación de Python usando OpenCV:

import cv2 as cv
import numpy as np

def unsharp_mask(image, kernel_size=(5, 5), sigma=1.0, amount=1.0, threshold=0):
    """Return a sharpened version of the image, using an unsharp mask."""
    blurred = cv.GaussianBlur(image, kernel_size, sigma)
    sharpened = float(amount + 1) * image - float(amount) * blurred
    sharpened = np.maximum(sharpened, np.zeros(sharpened.shape))
    sharpened = np.minimum(sharpened, 255 * np.ones(sharpened.shape))
    sharpened = sharpened.round().astype(np.uint8)
    if threshold > 0:
        low_contrast_mask = np.absolute(image - blurred) < threshold
        np.copyto(sharpened, image, where=low_contrast_mask)
    return sharpened

def example():
    image = cv.imread('my-image.jpg')
    sharpened_image = unsharp_mask(image)
    cv.imwrite('my-sharpened-image.jpg', sharpened_image)
¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *