Ricerca…


Sintassi

  1. Sintassi Gaussian Blur C ++: void GaussianBlur (InputArray src, OutputArray dst, Dimensione ksize, doppio sigmaX, doppio sigmaY = 0, int borderType = BORDER_DEFAULT)

Parametri

Parametri di Gaussian Blur Dettagli
src Immetti l'immagine, l'immagine può avere un numero qualsiasi di canali, che vengono elaborati indipendentemente, ma la profondità dovrebbe essere CV_8U , CV_16U , CV_16S , CV_32F o CV_64F .
dst Immagine di uscita della stessa dimensione e tipo di src
Kdim Dimensione del kernel gaussiana. ksize.width e ksize.height possono differire ma entrambi devono essere positivi e dispari . Oppure, possono essere zero e quindi vengono calcolati da sigma *.
Sigmax Deviazione standard del kernel gaussiano in direzione X.
sigmay Deviazione standard del kernel gaussiano in direzione Y. se sigmaY è zero, è impostato per essere uguale a sigmaX , se entrambi i sigma sono zeri, sono calcolati da ksize.width e ksize.height . Per controllare completamente il risultato, indipendentemente dalle possibili modifiche future di tutta questa semantica, si consiglia di specificare tutti i ksize di ksize , sigmaX e sigmaY .
borderType Metodo di estrapolazione dei pixel.

Osservazioni

Non penso che abbia senso mettere sintassi e parametri specifici per la sfocatura gaussiana in questo posto, dato che l'argomento è così ampio che dovrebbe includere molti altri esempi

Smussare le immagini con Gaussian Blur in C ++

La levigatura, nota anche come sfocatura , è una delle operazioni più comunemente utilizzate nell'elaborazione delle immagini.

L'uso più comune dell'operazione di levigatura consiste nel ridurre il rumore nell'immagine per un'ulteriore elaborazione.

Esistono molti algoritmi per eseguire l'operazione di livellamento.

Vedremo uno dei filtri più comunemente utilizzati per la sfocatura di un'immagine, il filtro gaussiano che utilizza la funzione di libreria OpenCV GaussianBlur() . Questo filtro è progettato specificamente per rimuovere il rumore ad alta frequenza dalle immagini.

#include <opencv2/opencv.hpp>
#include <iostream>

using namespace std;
using namespace cv;

int main(int argc, char** argv){

    Mat image , blurredImage;

    // Load the image file
    image = imread(argv[1], CV_LOAD_IMAGE_COLOR);

    // Report error if image could not be loaded
    if(!image.data){
        cout<<"Error loading image" << "\n";
        return -1;
    }

    // Apply the Gaussian Blur filter. 
    // The Size object determines the size of the filter (the "range" of the blur)
    GaussianBlur( image, blurredImage, Size( 9, 9 ), 1.0);

    // Show the blurred image in a named window
    imshow("Blurred Image" , blurredImage);

    // Wait indefinitely untill the user presses a key
    waitKey(0);

    return 0;
}

Per la definizione matematica dettagliata e altri tipi di filtri è possibile controllare la documentazione originale .

thresholding

In Python:

prima della soglia

import cv2
image_path= 'd:/contour.png'
img = cv2.imread(image_path)

#display image before thresholding
cv2.imshow('I am an image display window',img)
cv2.waitKey(0)

#convert image to gray scale - needed for thresholding
img_gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)


#apply threshold to gray image to obtain binary image

threshold=150 #value above which pixel values will be set to max_value
max_value=255  #value to which pixels above threshold will be set
threshold_stype=cv2.THRESH_BINARY #default threshold method

ret, img_binary = cv2.threshold(img_gray, threshold, max_value, threshold_stype)

#display image after thresholding
cv2.imshow('image after applying threshold',img_binary)
cv2.waitKey(0)

#save the binary image
cv2.imwrite('d:/binary.png',img_binary)
cv2.destroyAllWindows()

dopo la soglia

Filtro bilaterale

Nelle applicazioni di elaborazione delle immagini, i filtri bilaterali sono un tipo speciale di filtri non lineari .

C'è un compromesso tra la struttura che perde e la rimozione del rumore, perché il metodo più popolare per rimuovere il rumore è la sfocatura gaussiana che non è a conoscenza della struttura dell'immagine; quindi, rimuove anche i bordi. Il più delle volte, i bordi contengono preziose informazioni sulla scena e non vogliamo perderla. Il filtro bilaterale è consapevole della struttura della scena e tende ad agire come un classico filtro di sfocatura quando si trova su un'area senza bordi; tuttavia, quando vede un bordo, cambia il suo comportamento; in questo modo, la sfocatura non funziona sui bordi, ma funziona lungo i bordi, il che significa che sono filtri che preservano i bordi .

#include <opencv2/opencv.hpp>
#include <iostream>

void main(int argc, char* argv[]) {
    if(argc==1) {
        std::cout << argv[0] << " <image>" << endl;
        return;
    }

    cv::Mat image, output;
    image = cv::imread(argv[1]);
    if(image.empty()) {
        std::cout << "Unable to load the image: " << argv[1] << endl;
        return;
    }

    cv::bilateralFilter(image, output, 3, 5, 3);
}


Modified text is an extract of the original Stack Overflow Documentation
Autorizzato sotto CC BY-SA 3.0
Non affiliato con Stack Overflow