ccyy's coding zone
往前走,不要留恋路边的风景.
posts - 25,comments - 9,trackbacks - 0
杯具....写了个中值滤波器的函数编译没过...然后发现openCV里面有直接的函数...囧..

自己写的中值率波函数,,应该没啥问题,RGB通道分别做一次:

C++语言: 中值滤波
*#include<algorithm>
using namespace std;
IplImage* CDrawDlg::MiddleProssing(IplImage* img,IplImage* img1)
{
    int i,j,k,t;
    int move[8][2]={{0,1},{1,0},{-1,0},{0,-1},{1,1},{-1,-1},{1,-1},{-1,1}};
    int p[9];
    IplImage* tmp= detectanddraw(img);
    IplImage* tmp1=detectanddraw(img1);
    for(i=1;i<tmp->height-1;i++)
    {
        for(j=1;j<tmp->width-1;j++)
        {
            for(t=0;t<3;t++)
            {
                int ii=i;
                int jj=j;
                p[8]=((uchar*)(img->imageData + img->widthStep*jj))[ii*3+t];
                for(k=0;k<8;k++)
                {
                    ii=i+move[k][0];
                    jj=j+move[k][1];
                    p[k]=((uchar*)(img->imageData + img->widthStep*jj))[ii*3+t];
                }
                sort(p,p+9);
                ((uchar*)(img1->imageData + img1->widthStep*j))[i*3+t]=p[4];

            }
        }
    }
    return img1;

}
openCV的中值滤波函数

cvSmooth,其函数声明为:
cvSmooth( const void* srcarr, void* dstarr, int smoothtype,int param1, int param2, double param3 )
cvSmooth函数的作用是对图象做各种方法的图象平滑。其中,srcarr为输入图象;dstarr为输出图象;param1为平滑操作的第一个
参数;param2为平滑操作的第二个参数(如果param2值为0,则表示它被设为param1);param3是对应高斯参数的标准差。
参数smoothtype是图象平滑的方法选择,主要的平滑方法有以下五种:
CV_BLUR_NO_SCALE:简单不带尺度变换的模糊,即对每个象素在 param1×param2领域求和。
CV_BLUR:对每个象素在param1×param2邻域求和并做尺度变换 1/(param1•param2)。
CV_GAUSSIAN:对图像进行核大小为param1×param2的高斯卷积。
CV_MEDIAN:对图像进行核大小为param1×param1 的中值滤波(邻域必须是方的)。
CV_BILATERAL:双向滤波,应用双向 3x3 滤波,彩色设置为param1,空间设置为param2。
阅读全文
类别:默认分类 查看评论
文章来源:http://hi.baidu.com/%D2%EC%B6%C8%BF%D5%BC%E4%5F%B5%DA%CB%C4%CE%AC/blog/item/375fba3df47dbccf7c1e71b4.html
posted on 2010-06-10 18:05 ccyy 阅读(717) 评论(0)  编辑 收藏 引用

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理