2012-03-23 56 views
5

Me gustaría saber cómo puedo hacer un filtro de paso bajo en opencv en una imagen Ipl. Por ejemplo, "boxcar" o algo similar.filtro de paso bajo en opencv

Lo he buscado en Google pero no puedo encontrar una solución clara. Si alguien pudiera darme un ejemplo o señalarme en la dirección correcta sobre cómo implementar esto en opencv o javacv, le estaría agradecido.

Thx de antemano.

+0

No estoy seguro de qué quiere decir exactamente. Low-pass generalmente significa bajas frecuencias ... ¿te refieres a cierto extremo del espectro de color? – thecoshman

+1

Para más información: http://paulbourke.net/miscellaneous/imagefilter/ – Ojtwist

Respuesta

4

Aquí hay un ejemplo usando la API de C y IplImage:

#include "opencv2/imgproc/imgproc_c.h" 
#include "opencv2/highgui/highgui_c.h" 

int main() 
{ 
    IplImage* img = cvLoadImage("input.jpg", 1); 
    IplImage* dst=cvCreateImage(cvGetSize(img),IPL_DEPTH_8U,3); 
    cvSmooth(img, dst, CV_BLUR); 
    cvSaveImage("filtered.jpg",dst); 
} 

Para obtener información sobre los parámetros de la función cvSmooth se puede echar un vistazo a cvSmooth Documentation.

Si desea utilizar una máscara de filtro personalizado se puede utilizar la función cvFilter2D:

#include "opencv2/imgproc/imgproc_c.h" 
#include "opencv2/highgui/highgui_c.h" 

int main() 
{ 
    IplImage* img = cvLoadImage("input.jpg", 1); 
    IplImage* dst=cvCreateImage(cvGetSize(img),IPL_DEPTH_8U,3); 
    double a[9]={ 1.0/9.0,1.0/9.0,1.0/9.0, 
        1.0/9.0,1.0/9.0,1.0/9.0, 
        1.0/9.0,1.0/9.0,1.0/9.0}; 
    CvMat k; 
    cvInitMatHeader(&k, 3, 3, CV_64FC1, a); 

    cvFilter2D(img ,dst, &k,cvPoint(-1,-1)); 
    cvSaveImage("filtered.jpg",dst); 
} 

Estos ejemplos utilizan OpenCV 2.3.1.

3

La documentación de openCV filtering es un poco confusa porque las funciones intentan y cubren eficazmente todas las técnicas de filtrado posibles.

Hay una tutorial sobre el uso de sus propios núcleos de filtro que cubre filtros caja

Cuestiones relacionadas