opencv
Procesamiento de imágenes
Buscar..
Sintaxis
- Sintaxis de Blur Gaussian C ++: void GaussianBlur (InputArray src, OutputArray dst, Tamaño ksize, doble sigmaX, double sigmaY = 0, int borderType = BORDER_DEFAULT)
Parámetros
Parámetros del Desenfoque Gaussiano | Detalles |
---|---|
src | Imagen de entrada, la imagen puede tener cualquier número de canales, que se procesan de forma independiente, pero la profundidad debe ser CV_8U , CV_16U , CV_16S , CV_32F o CV_64F . |
dst | Imagen de salida del mismo tamaño y tipo que src |
ksize | Tamaño del núcleo gaussiano. ksize.width y ksize.height pueden diferir, pero ambos deben ser positivos e impares . O bien, pueden ser cero y luego se calculan a partir de sigma *. |
sigmaX | Desviación estándar del núcleo gaussiano en la dirección X. |
sigmaY | Desviación estándar del núcleo gaussiano en dirección Y. si sigmaY es cero, se establece como igual a sigmaX , si ambos sigmas son ceros, se calculan desde ksize.width y ksize.height . Para controlar completamente el resultado, independientemente de las posibles modificaciones futuras de toda esta semántica, se recomienda especificar todo el ksize de ksize , sigmaX y sigmaY . |
borderType | Método de extrapolación de píxeles. |
Observaciones
No creo que tenga sentido poner sintaxis y parámetros específicos para el desenfoque gaussiano en este lugar, ya que el tema es tan amplio que debería incluir muchos otros ejemplos.
Suavizar imágenes con desenfoque gaussiano en C ++
El suavizado, también conocido como desenfoque , es una de las operaciones más utilizadas en el procesamiento de imágenes.
El uso más común de la operación de suavizado es reducir el ruido en la imagen para su posterior procesamiento.
Hay muchos algoritmos para realizar operaciones de suavizado.
Veremos uno de los filtros más utilizados para desenfocar una imagen, el Filtro Gaussiano que utiliza la función de biblioteca OpenCV GaussianBlur()
. Este filtro está diseñado específicamente para eliminar el ruido de alta frecuencia de las imágenes.
#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;
}
Para la definición matemática detallada y otros tipos de filtros, puede consultar la documentación original .
Umbral
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()
Filtrado bilateral
En las aplicaciones de procesamiento de imágenes, los filtros bilaterales son un tipo especial de filtros no lineales .
Existe un intercambio entre la pérdida de estructura y la eliminación de ruido, porque el método más popular para eliminar el ruido es el desenfoque gaussiano, que no es consciente de la estructura de la imagen; Por lo tanto, también elimina los bordes. La mayoría de las veces, los bordes contienen información valiosa sobre la escena y no queremos perderla. El filtro bilateral es consciente de la estructura de la escena y tiende a actuar como un filtro borroso clásico cuando está en un área sin bordes; sin embargo, cuando ve una ventaja, cambia su comportamiento; de modo que, el desenfoque no funciona a lo largo de los bordes, sino que funciona a lo largo de los bordes, lo que significa que son filtros que conservan los bordes.
#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);
}