image-processing - imagen - opencv python machine learning
Cómo afilar una imagen en OpenCV? (4)
Cómo afilar una imagen usando OpenCV ? Hay muchas formas de suavizar o difuminar, pero ninguna de las que pude ver de nitidez.
Puede probar un kernel simple y filter2D
, 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 (breve) visión general de los núcleos:
Se describe un procedimiento general en el artículo de wikipedia sobre enmascaramiento de enfoque : se usa un filtro suavizado gaussiano y se 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 más nítida del frame
en la 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 allí son algo que necesitas ajustar por ti mismo.
También hay afilado laplaciano, deberías encontrar algo sobre eso cuando buscas en Google.
puede encontrar un código de muestra sobre la nitidez de la imagen usando el algoritmo "máscara de enfoque" en la documentación de OpenCV
los valores cambiantes de sigma
, threshold
, amount
darán resultados diferentes
// sharpen image using "unsharp mask" algorithm
Mat blurred; double sigma = 1, threshold = 5, amount = 1;
GaussianBlur(img, blurred, Size(), sigma, sigma);
Mat lowContrastMask = abs(img - blurred) < threshold;
Mat sharpened = img*(1+amount) + blurred*(-amount);
img.copyTo(sharpened, lowContrastMask);