opencv
Elaborazione delle immagini
Ricerca…
Sintassi
- 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:
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()
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);
}