2012-03-23 9 views
5

Mi piacerebbe sapere come posso fare un filtro passa-basso in opencv su un IplImage. Ad esempio "boxcar" o qualcosa di simile.filtro passa-basso in opencv

Ho cercato su google ma non riesco a trovare una soluzione chiara. Se qualcuno potesse darmi un esempio o indicarmi la giusta direzione su come implementarlo in opencv o javacv, sarei grato.

Thx in anticipo.

+0

Non sono sicuro di cosa intendi esattamente. Passa basso di solito significa basse frequenze ... quindi intendi una certa parte dello spettro dei colori? – thecoshman

+1

Per maggiori informazioni: http://paulbourke.net/miscellaneous/imagefilter/ – Ojtwist

risposta

4

Ecco un esempio utilizzando l'API C e 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); 
} 

Per informazioni su quali parametri della funzione cvSmooth voi può dare un'occhiata allo cvSmooth Documentation.

Se si desidera utilizzare una maschera di filtro personalizzato è possibile utilizzare la funzione di 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); 
} 

Questi esempi usano OpenCV 2.3.1.

3

La documentazione openCV filtering è un po 'confusa perché le funzioni cercano di coprire efficacemente ogni possibile tecnica di filtraggio.

C'è un tutorial sull'utilizzo il proprio kernel di filtro che copre filtri box