opencv
Traitement d'image
Recherche…
Syntaxe
- Syntaxe du flou gaussien C ++: GaussianBlur vide (InputArray src, OutputArray dst, Taille ksize, double sigmaX, double sigmaY = 0, int borderType = BORDER_DEFAULT)
Paramètres
Paramètres du flou gaussien | Détails |
---|---|
src | Image d'entrée, l'image peut avoir n'importe quel nombre de canaux, qui sont traités indépendamment, mais la profondeur doit être CV_8U , CV_16U , CV_16S , CV_32F ou CV_64F . |
dst | Image de sortie de la même taille et du même type que src |
ksize | Taille du noyau gaussien. ksize.width et ksize.height peuvent différer mais ils doivent tous deux être positifs et impairs . Ou, ils peuvent être zéro et ils sont calculés à partir de sigma *. |
SigmaX | Écart type du noyau gaussien dans la direction X |
sigmaY | Écart type du noyau gaussien dans la direction Y Si sigmaY est à zéro, il est défini pour être égal à sigmaX , si les deux sigmas sont des zéros, ils sont calculés à partir de ksize.width et de ksize.height . Pour contrôler complètement le résultat indépendamment des modifications futures possibles de toute cette sémantique, il est recommandé de spécifier tous les ksize , sigmaX et sigmaY . |
borderType | Méthode d'extrapolation de pixels. |
Remarques
Je ne pense pas qu'il soit logique de mettre la syntaxe et les paramètres spécifiques au flou gaussien dans ce lieu, car le sujet est tellement vaste qu'il devrait inclure de nombreux autres exemples.
Lissage d'images avec flou gaussien en C ++
Le lissage, également appelé flou , est l’une des opérations les plus couramment utilisées dans le traitement d’images.
L'utilisation la plus courante de l'opération de lissage consiste à réduire le bruit dans l'image pour un traitement ultérieur.
Il existe de nombreux algorithmes pour effectuer le lissage.
Nous allons examiner l'un des filtres les plus couramment utilisés pour brouiller une image, le filtre gaussien utilisant la fonction de bibliothèque OpenCV GaussianBlur()
. Ce filtre est conçu spécifiquement pour supprimer le bruit haute fréquence des images.
#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;
}
Pour la définition mathématique détaillée et d'autres types de filtres, vous pouvez vérifier la documentation d'origine .
Seuillage
En 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()
Filtrage Bilatéral
Dans les applications de traitement d'image, les filtres bilatéraux constituent un type particulier de filtres non linéaires .
Il y a un compromis entre la perte de structure et la suppression du bruit, car la méthode la plus populaire pour éliminer le bruit est le flou gaussien qui ne connaît pas la structure de l'image; par conséquent, il supprime également les bords. La plupart du temps, les bords contiennent des informations précieuses sur la scène et nous ne voulons pas les perdre. Le filtre bilatéral connaît la structure de la scène et a tendance à agir comme un filtre de flou classique lorsqu'il se trouve sur une zone sans arêtes. cependant, quand il voit un bord, il change de comportement; de sorte que le flou ne fonctionne pas sur tous les bords, mais fonctionne le long des bords, ce qui signifie qu'ils sont des filtres préservant les bords.
#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);
}