opencv
Bildverarbeitung
Suche…
Syntax
- 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:
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 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);
}