opencv
Bildbehandling
Sök…
Syntax
- Gaussian Blur Syntax C ++: void GaussianBlur (InputArray src, OutputArray dst, Storlek ksize, double sigmaX, double sigmaY = 0, int borderType = BORDER_DEFAULT)
parametrar
Parametrar för Gaussian oskärpa | detaljer |
---|---|
src | Inmatningsbild, bilden kan ha valfritt antal kanaler, som behandlas oberoende, men djupet bör vara CV_8U , CV_16U , CV_16S , CV_32F eller CV_64F . |
dst | Utmatningsbild av samma storlek och typ som src |
ksize | Gaussisk kärnstorlek. ksize.width och ksize.height kan ksize.height men båda måste vara positiva och udda . Eller så kan de vara nollor och sedan beräknas de från sigma *. |
Sigmax | Gaussisk kärnstandardavvikelse i X-riktning . |
sigmaY | Gaussisk kärnstandardavvikelse i Y-riktning . om sigmaY är noll, är den inställd på att vara lika med sigmaX , om båda sigmas är nollor beräknas de från ksize.width och ksize.height . För att fullständigt kontrollera resultatet oavsett möjliga framtida ändringar av all denna semantik rekommenderas det att du anger alla ksize , sigmaX och sigmaY . |
borderType | Pixel-extrapoleringsmetod. |
Anmärkningar
Jag tror inte att det är vettigt att sätta syntax och parametrar specifika för gaussisk oskärpa på denna plats eftersom ämnet är så brett att det borde innehålla många andra exempel
Utjämna bilder med Gaussian oskärpa i C ++
Utjämning, även känd som suddighet , är en av de mest använda operationerna i bildbehandling.
Den vanligaste användningen av utjämningsoperationen är att minska brus i bilden för vidare bearbetning.
Det finns många algoritmer för att utföra utjämningsoperationer.
Vi tittar på ett av de mest använda filtren för att göra en bild suddig, det gaussiska filtret med OpenCV-biblioteksfunktionen GaussianBlur()
. Detta filter är speciellt utformat för att ta bort högfrekventa brus från bilder.
#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;
}
För den detaljerade matematiska definitionen och andra typer av filter kan du kontrollera originaldokumentationen .
tröskling
I 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()
Bilateral filtrering
I bildbehandlingsapplikationer är de bilaterala filtren en speciell typ av icke-linjära filter .
Det finns en avvägning mellan att förlora struktur och brusborttagning, eftersom den mest populära metoden för att ta bort brus är Gaussisk suddighet som inte är medveten om bildstrukturen; därför tar det också bort kanterna. Merparten av tiden innehåller kanter värdefull information om scenen och vi vill inte tappa den. Det bilaterala filtret är medvetet om scenens struktur och det tenderar att fungera som ett klassiskt suddighetsfilter när det är på ett område utan kanter; emellertid när den ser en kant ändrar den dess beteende; så att oskärpa inte fungerar över kanterna, men det fungerar längs kanterna, vilket betyder att de är kantbevarande filter .
#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);
}