【c++|opencv】二、灰度变换和空间滤波---3.均值滤波

every blog every motto: You can do more than you think.
https://blog.csdn.net/weixin_39190382?type=blog

0. 前言

均值滤波

1. 均值滤波

cpp 复制代码
#include <iostream>
#include <opencv2/opencv.hpp>
#include"Salt.h"

using namespace cv;
using namespace std;

// 定义盒式滤波器
void myfilter(int filter_size,Mat& img_input,Mat& img_output);

int main(){
    Mat img,img_gray,img_output,img_output2;
    img = imread("/home/v/home.png");

    if (img.empty()){
        cout<<"can not load image"<<endl;
        return -1;
    }

    cvtColor(img,img_gray,COLOR_BGR2GRAY);
    Salt(img_gray,5000);  
    imshow("img_gray",img_gray);

    // 自定义滤波
    int filter_size = 7;
    myfilter(filter_size,img_gray,img_output);

    // opencv 自带滤波
    blur(img_gray,img_output2,Size(filter_size,filter_size));

    imshow("img out 1",img_output);
    imshow("img out 2",img_output2);

    waitKey(0);
    return 0;
}

// 盒式滤波
void myfilter(int filter_size,Mat& img_input,Mat& img_output){
    img_output = img_input.clone();

    int k = (filter_size - 1)/2;
    for (int i = k;i<(img_input.rows - k);i++){
        for (int j = k;j<(img_input.cols - k);j++){
            int sum = 0;
            for (int m = -k;m<k+1;m++){
                for (int n=-k;n<k+1;n++)
                {
                    sum += img_input.at<uchar>(i+m,j+n);
                }
            }
            img_output.at<uchar>(i,j) = sum/(filter_size*filter_size);
        }
    }
}
相关推荐
无敌最俊朗@几秒前
STL-关联容器(面试复习4)
开发语言·c++
无限进步_7 分钟前
【C语言】栈(Stack)数据结构的实现与应用
c语言·开发语言·数据结构·c++·后端·visual studio
闻缺陷则喜何志丹7 分钟前
【计算几何 SAT轴】P6732 「Wdsr-2」方分|普及+
c++·数学·计算几何·sat轴·凸多边形分离
embrace997 分钟前
【C语言学习】预处理详解
java·c语言·开发语言·数据结构·c++·学习·算法
拼好饭和她皆失10 分钟前
《二分答案算法精讲:从原理到实战(上篇)》
c++·算法
helloworddm16 分钟前
C++与C#交互 回调封装为await
c++·c#·交互
应用市场18 分钟前
TCP网络连接断开检测机制详解——C++实现网络连通性判断与断线类型识别
网络·c++·tcp/ip
雾岛听蓝20 分钟前
C/C++内存管理
c语言·c++
AuroraWanderll24 分钟前
类和对象(三)-默认成员函数详解与运算符重载
c语言·开发语言·数据结构·c++·算法
Minecraft红客26 分钟前
C++制作迷宫第一版
c++·游戏·电脑·娱乐