Come affinare un’immagine in OpenCV?

Come migliorare l’immagine usando OpenCV ? Ci sono molti modi di levigare o sfocare, ma nessuno che io possa vedere di sharpening.

Una procedura generale è esposta nell’articolo di wikipedia sul mascheramento di unsharp : si utilizza un filtro smoothing gaussiano e si sottrae la versione levigata dall’immagine originale (in modo ponderato in modo che i valori di un’area costante rimangano costanti).

Per ottenere una versione più nitida del frame image : (entrambi cv::Mat )

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

I parametri ci sono qualcosa che devi aggiustare per te stesso.

C’è anche lo sharpening di laplacian, dovresti trovare qualcosa su questo quando google.

Puoi provare un kernel semplice e la funzione filter2D , ad esempio in Python:

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

Wikipedia ha una buona panoramica dei kernel con alcuni altri esempi qui – https://en.wikipedia.org/wiki/Kernel_(image_processing)

Nell’elaborazione delle immagini, un kernel, una matrice di convoluzione o una maschera è una piccola matrice. Viene utilizzato per sfocatura, nitidezza, rilievo, rilevamento dei bordi e altro. Questo si ottiene facendo una convoluzione tra un kernel e un’immagine.

è ansible trovare un codice di esempio sulla nitidezza dell’immagine utilizzando l’algoritmo “maschera di contrasto” nella documentazione di OpenCV

cambiare i valori di sigma , threshold , amount darà risultati diversi

 // 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); 

Prova con questo:

 cv::bilateralFilter(img,9,75,75); 

Potresti trovare maggiori informazioni qui