1. 程式人生 > >opencv中線性和非線性濾波(程式)分析

opencv中線性和非線性濾波(程式)分析

線性濾波的方框濾波,均值濾波與高斯濾波,屬於非線性濾波的中值濾波,雙邊濾波,對應的程式中都給出了,這是一個綜合的測試程式。
#include <opencv2\opencv.hpp>
#include <opencv2\highgui\highgui.hpp>
#include <opencv2\imgproc\imgproc.hpp>

using namespace cv;
using namespace std;

Mat img,img1,img2,img3,img4,img5;
int boxValue=3,boxValueMax=40;
int blurValue=3,blurValueMax=40;
int gaussianValue=3,gaussianValueMax=40;
int medianBlurValue=10,medianBlurValueMax=50;
int bilateralFilterValue=10,bilateralFilterValueMax=50;

void on_boxFilter(int,void*)
{
boxFilter(img,img1,-1,Size(boxValue+1,boxValue+1));
imshow(“方框濾波”,img1);
}
void on_blur(int,void*)
{
blur(img,img2,Size(blurValue+1,blurValue+1),Point(-1,-1));
imshow(“均值濾波”,img2);
}
void on_gaussianFilter(int,void*)
{
GaussianBlur(img,img3,Size((gaussianValue2)+1,(gaussianValue

2)+1),0,0);
imshow(“高斯濾波”,img3);
}
void on_MedianBlur(int,void*)
{
medianBlur(img,img4,(2medianBlurValue)+1);
imshow(“中值濾波”,img4);
}
void on_BilateralFilter(int,void
)
{
bilateralFilter(img,img5,bilateralFilterValue,bilateralFilterValue*2,bilateralFilterValue/2);
imshow(“雙邊濾波”,img5);
}
int main()
{
img=imread(“1.jpg”);
img1=img.clone();
img2=img.clone();
img3=img.clone();
img4=img.clone();
img5=img.clone();
imshow(“原圖”,img);
namedWindow(“方框濾波”,1);
createTrackbar(“方框參:”,“方框濾波”,&boxValue,boxValueMax,on_boxFilter);
on_boxFilter(boxValue,0);
namedWindow(“均值濾波”,1);
createTrackbar(“均值參:”,“均值濾波”,&blurValue,blurValueMax,on_blur);
on_blur(blurValue,0);
namedWindow(“高斯濾波”,1);
createTrackbar(“高斯參:”,“高斯濾波”,&gaussianValue,gaussianValueMax,on_gaussianFilter);
on_gaussianFilter(gaussianValueMax,0);
namedWindow(“中值濾波”,1);
createTrackbar("中值參: ",“中值濾波”,&medianBlurValue,medianBlurValueMax,on_MedianBlur);
on_MedianBlur(medianBlurValue,0);
namedWindow(“雙邊濾波”,1);
createTrackbar(“雙邊參:”,“雙邊濾波”,&bilateralFilterValue,bilateralFilterValueMax,on_BilateralFilter);
on_BilateralFilter(bilateralFilterValue,0);
while(char(waitKey(0)) != ‘q’) //按下q鍵釋放程式
{}
return 0;
}
謝謝大家的支援,一天一點點!!