2012-03-23 32 views
5

Tôi muốn biết làm thế nào tôi có thể thực hiện bộ lọc low-pass trong opencv trên IplImage. Ví dụ: "ô tô" hoặc thứ gì đó tương tự.bộ lọc low-pass trong opencv

Tôi đã googled nó nhưng tôi không thể tìm thấy một giải pháp rõ ràng. Nếu bất cứ ai có thể cho tôi một ví dụ hoặc chỉ cho tôi đúng hướng về cách thực hiện điều này trong opencv hoặc javacv tôi sẽ biết ơn.

Thx trước.

+0

Tôi không chắc chắn chính xác bạn muốn nói gì. Low-pass thường có nghĩa là tần số thấp ... vì vậy bạn có nghĩa là kết thúc nhất định của quang phổ màu? – thecoshman

+1

Để biết thêm thông tin: http://paulbourke.net/miscellaneous/imagefilter/ – Ojtwist

Trả lời

4

Dưới đây là một ví dụ sử dụng API C và 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); 
} 

Để biết thông tin về những gì các thông số của hàm cvSmooth bạn có thể xem cvSmooth Documentation.

Nếu bạn muốn sử dụng một mặt nạ lọc tùy chỉnh, bạn có thể sử dụng chức năng 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); 
} 

Những ví dụ này sử dụng OpenCV 2.3.1.

3

Tài liệu openCV filtering hơi khó hiểu vì các chức năng cố gắng và hiệu quả bao gồm mọi kỹ thuật lọc có thể.

Có một tutorial về việc sử dụng hạt nhân lọc riêng của bạn trong đó bao gồm các bộ lọc hộp

Các vấn đề liên quan