OpenCV中的低通滤波器

7
我想了解如何在IplImage上使用opencv进行低通滤波,例如“boxcar”或类似的方法。我已经搜索过了,但找不到清晰的解决方案。如果有人能给我一个示例或指点我如何在opencv或javacv中实现这个功能,我将不胜感激。谢谢!

我不确定您的确切意思。低通通常指低频......所以您是指颜色光谱的某个端点吗? - thecoshman
1
更多信息请访问:http://paulbourke.net/miscellaneous/imagefilter/ - Olivier_s_j
2个回答

5
这里有一个使用C API和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);
}

关于cvSmooth函数的参数信息,您可以查看cvSmooth文档

如果您想使用自定义的滤波器掩模,则可以使用函数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);
}

这些示例使用的是OpenCV 2.3.1版本。


4

由于函数尝试高效地涵盖每种可能的过滤技术,因此openCV过滤文档有点令人困惑。

有一个教程介绍如何使用你自己的过滤器内核,其中包括了方形过滤器。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接