杯具....寫了個中值濾波器的函數編譯沒過...然后發現openCV里面有直接的函數...囧..
自己寫的中值率波函數,,應該沒啥問題,RGB通道分別做一次:
*#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 閱讀(721)
評論(0) 編輯 收藏 引用