滤波操作

版本:Opencv320、VS2015

//-------------------------------------【滤波】-----------------------------------------
//描述:方框滤波、均值滤波、高斯滤波、种值滤波、双边滤波(比较适合用来美颜)
//--------------------------------------------------------------------------------------

#include "opencv2/core/core.hpp"  
#include"opencv2/highgui/highgui.hpp"  
#include"opencv2/imgproc/imgproc.hpp"  
#include <stdio.h>
//-----------------------内核------------------------------------------------
//  描述:其实就是一个颜色的取值根据他周围颜色来计算,内核值就是这个周围有多大
//---------------------------------------------------------------------------
using namespace cv;
Mat g_srcImage;
Mat g_dstImage1, g_dstImage2, g_dstImage3,g_dstImage4,g_dstImage5;
int g_nBoxFilter = 3; //方框滤波的内核大小 (等于3就是一个3X3大小的区域)
int g_nBlur = 3;//均值滤波的内核大小
int g_nGaussianBlur = 3;//高斯滤波的内核大小
int g_nMedianBlur = 3; //中值滤波的孔径大小
int g_nBilateralFilter = 3;//双边滤波的过滤像素的领域直径
//---------------------【全局函数声明部分】---------------------------------
//  描述:全局函数声明
//--------------------------------------------------------------------------
//轨迹条的回调函数
void on_BoxFilter(int,void*);
void on_Blur(int,void*);
void on_GaussianBlur(int,void*);
void on_MedianBlur(int, void*);
void on_BilateralFilter(int, void*);

int main() {
    //载入图片
    g_srcImage = imread("61.bmp");
    if (!g_srcImage.data) { printf("没有找到图片\n"); return 0; }
    //用zeros创建一个空的和用clone函数克隆是一样的。
    g_dstImage1 = Mat::zeros(g_srcImage.size(),g_srcImage.type());
    g_dstImage2 = g_srcImage.clone();
    g_dstImage3 = g_srcImage.clone();
    g_dstImage4 = g_srcImage.clone();
    namedWindow("原图");
    imshow("原图", g_srcImage);
    namedWindow("方框滤波效果演示");
    namedWindow("均值滤波效果演示");
    namedWindow("高斯滤波效果演示");
    namedWindow("中值滤波效果演示");
    namedWindow("双边滤波效果演示");
    //createTrackbar 滑动条
    //参数:(窗口名称,滑动条的名称,进度条的值保持到这个变量里,进度条的最大值,进度条的回调函数,一般不写)
    createTrackbar("方框滤波","方框滤波效果演示",&g_nBoxFilter,20,on_BoxFilter);
    createTrackbar("均值滤波","均值滤波效果演示", &g_nBlur, 20, on_Blur);
    createTrackbar("高斯滤波","高斯滤波效果演示", &g_nGaussianBlur, 20, on_GaussianBlur);
    createTrackbar("中值滤波", "中值滤波效果演示", &g_nMedianBlur, 20, on_MedianBlur);
    createTrackbar("双边滤波","双边滤波效果演示",&g_nBilateralFilter,20,on_BilateralFilter);
    on_BoxFilter(0, 0);
    on_Blur(0, 0);
    on_GaussianBlur(0, 0);
    on_MedianBlur(0, 0);
    on_BilateralFilter(0, 0);
    waitKey(156000);
    return 0;
}

//方框滤波
void on_BoxFilter(int, void*) {
    //因为size是-1开始的所以要+1
    //参数列表:(原图,经过滤波后的图像存到这个变量里,内核大小,取默认值,取默认值,取默认值)
    boxFilter(g_srcImage, g_dstImage1, -1, Size(g_nBoxFilter + 1, g_nBoxFilter + 1));
    imshow("方框滤波效果演示", g_dstImage1);
}

//均值滤波
void on_Blur(int,void*) {
    //参数列表:(原图,经过滤波后的图像存到这个变量里,内核大小,取默认值,取默认值)
    blur(g_srcImage,g_dstImage2, Size(g_nBlur + 1, g_nBlur + 1));
    imshow("均值滤波效果演示", g_dstImage2);
}

//高斯滤波
void on_GaussianBlur(int,void*) {
    //高斯滤波的Size必须为正数的奇数
    //参数列表:(原图,经过滤波后的图像存到这个变量里,内核大小,一般填0,一般填0,取默认值)
    GaussianBlur(g_srcImage, g_dstImage3, Size(g_nGaussianBlur*2+1, g_nGaussianBlur*2+1), 0, 0);
    imshow("高斯滤波效果演示", g_dstImage3);
}

//中值滤波
void on_MedianBlur(int,void*) {
    //Size必须是正数的奇数
    //参数列表:(原图,经过滤波后的图像存到这个变量里,孔径大小<填个整数就行了>)
    medianBlur(g_srcImage,g_dstImage4,g_nMedianBlur*2+1);
    imshow("中值滤波效果演示",g_dstImage4);
}

//双边滤波
void on_BilateralFilter(int, void*) {
    //参数列表:(原图,经过滤波后的图像存到这个变量里,过滤像素领域的直径,值越大颜色混合领域越大,值越大影响领域越大,一般取默认值)
    bilateralFilter(g_srcImage, g_dstImage5, g_nBilateralFilter, g_nBilateralFilter * 2, g_nBilateralFilter / 2);
    imshow("双边滤波效果演示",g_dstImage5);
}

原图
原图
方框滤波
方框滤波
均值滤波
均值滤波
高斯滤波
高斯滤波
中值滤波
中值滤波
双边滤波(用来美图效果很棒哦)
双边滤波(用来美图效果很棒哦)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值