Suche…


Syntax

  1. Gaussian Blur Syntax C ++: void GaussianBlur (InputArray src, OutputArray dst, Größe ksize, doppeltes SigmaX, doppeltes SigmaY = 0, int borderType = BORDER_DEFAULT)

Parameter

Parameter der Gaußschen Unschärfe Einzelheiten
src Eingabebild, das Bild kann eine beliebige Anzahl von Kanälen haben, die unabhängig verarbeitet werden, die Tiefe sollte jedoch CV_8U , CV_16U , CV_16S , CV_32F oder CV_64F .
dst Ausgabebild der gleichen Größe und des gleichen Typs wie src
ksize Gaußsche Kerngröße. ksize.width und ksize.height können sich unterscheiden, aber beide müssen positiv und ungerade sein . Oder sie können Nullen sein und werden dann aus Sigma * berechnet.
SigmaX Gaußsche Kern-Standardabweichung in X-Richtung .
SigmaY Gaußsche Kernstandardabweichung in Y-Richtung . Ist sigmaY Null, wird es gleich sigmaX . Sind beide Sigmas Nullen, werden sie aus ksize.width und ksize.height berechnet. Um das Ergebnis unabhängig von möglichen zukünftigen Modifikationen dieser Semantik vollständig zu steuern, wird empfohlen, alle ksize für ksize , sigmaX und sigmaY .
borderType Methode der Pixelextrapolation.

Bemerkungen

Ich denke nicht, dass es sinnvoll ist, Syntax und Parameter für Gaußsche Unschärfe an dieser Stelle zu verwenden, da das Thema so breit ist, dass es viele andere Beispiele enthalten sollte

Glätten von Bildern mit Gaußscher Unschärfe in C ++

Glätten, auch Unschärfe genannt , ist eine der am häufigsten verwendeten Operationen in der Bildverarbeitung.

Die häufigste Verwendung des Glättungsvorgangs besteht darin, das Rauschen im Bild für die weitere Verarbeitung zu reduzieren .

Es gibt viele Algorithmen zum Glätten.

Wir betrachten einen der am häufigsten verwendeten Filter zum Verwischen eines Bildes, den Gaußschen Filter mit der OpenCV-Bibliotheksfunktion GaussianBlur() . Dieser Filter wurde speziell zum Entfernen von hochfrequentem Rauschen aus Bildern entwickelt.

#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 die detaillierte mathematische Definition und andere Arten von Filtern können Sie die Originaldokumentation überprüfen.

Thresholding

In Python:

vor Schwelle

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()

nach Schwelle

Bilaterale Filterung

In Bildverarbeitungsanwendungen sind die bilateralen Filter eine besondere Art von nichtlinearen Filtern .

Es gibt einen Kompromiss zwischen dem Verlust der Struktur und der Rauschentfernung, da die am weitesten verbreitete Methode zur Rauschunterdrückung die Gaußsche Unschärfe ist, die die Bildstruktur nicht kennt. Daher werden auch die Kanten entfernt. Meistens enthalten Kanten wertvolle Informationen über die Szene, und wir möchten sie nicht verlieren. Der bilaterale Filter ist sich der Struktur der Szene bewusst und wirkt wie ein klassischer Unschärfefilter, wenn er sich in einem Bereich ohne Kanten befindet. Wenn er jedoch eine Kante sieht, ändert er sein Verhalten. Unschärfe funktioniert also nicht über die Kanten, sondern entlang der Kanten, was bedeutet, dass sie kantenerhaltende Filter sind .

#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
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow