opencv
Afbeelding verwerken
Zoeken…
Syntaxis
- Gaussian Blur Syntax C ++: void GaussianBlur (InputArray src, OutputArray dst, Size ksize, double sigmaX, double sigmaY = 0, int borderType = BORDER_DEFAULT)
parameters
Parameters van Gaussiaans vervagen | Details |
---|---|
src | Invoerafbeelding, de afbeelding kan elk aantal kanalen hebben, die onafhankelijk worden verwerkt, maar de diepte moet CV_8U , CV_16U , CV_16S , CV_32F of CV_64F . |
dst | Afbeelding uitvoeren van dezelfde grootte en hetzelfde type als src |
ksize | Gaussiaanse kerngrootte. ksize.width en ksize.height kunnen verschillen, maar beide moeten positief en vreemd zijn . Of ze kunnen nullen zijn en vervolgens worden ze berekend uit sigma *. |
Sigmax | Gaussiaanse kernel standaarddeviatie in X-richting . |
sigmaY | Gaussiaanse kernel standaarddeviatie in Y-richting . als sigmaY nul is, wordt ingesteld dat deze gelijk is aan sigmaX , als beide sigma's nullen zijn, worden ze berekend uit ksize.width en ksize.height . Om het resultaat volledig te beheersen, ongeacht mogelijke toekomstige wijzigingen van al deze semantiek, wordt aanbevolen om alle ksize , sigmaX en sigmaY . |
borderType | Pixel extrapolatie methode. |
Opmerkingen
Ik denk niet dat het zinvol is om syntaxis en parameters specifiek voor Gaussiaans vervagen op deze plaats te plaatsen, omdat het onderwerp zo breed is dat het veel andere voorbeelden moet bevatten
Afbeeldingen vloeiend maken met Gaussiaans vervagen in C ++
Vloeiend maken, ook bekend als vervagen , is een van de meest gebruikte bewerkingen in beeldverwerking.
Het meest gebruikelijke gebruik van de afvlakbewerking is het verminderen van ruis in het beeld voor verdere verwerking.
Er zijn veel algoritmen om de afvlakbewerking uit te voeren.
We kijken naar een van de meest gebruikte filters voor het vervagen van een afbeelding, het Gaussiaanse filter met de OpenCV-bibliotheekfunctie GaussianBlur()
. Dit filter is speciaal ontworpen voor het verwijderen van hoogfrequente ruis uit afbeeldingen.
#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;
}
Voor de gedetailleerde wiskundige definitie en andere soorten filters kunt u de originele documentatie raadplegen .
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()
Bilaterale filtering
In beeldverwerkingstoepassingen zijn de bilaterale filters een speciaal type niet-lineaire filters .
Er is een afweging tussen het verliezen van structuur en ruisverwijdering, omdat de meest populaire methode om ruis te verwijderen Gaussiaanse vervaging is, die zich niet bewust is van de structuur van het beeld; daarom verwijdert het ook de randen. Meestal bevatten randen waardevolle informatie over de scène en we willen deze niet kwijt. Het bilaterale filter is zich bewust van de structuur van de scène en heeft de neiging om te werken als een klassiek vervagend filter wanneer het zich op een gebied zonder randen bevindt; wanneer het echter een rand ziet, verandert het zijn gedrag; zodat vervaging niet langs de randen werkt, maar langs de randen, wat betekent dat het filters zijn die de randen behouden .
#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);
}