【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);
        }
    }
}
相关推荐
蜗牛沐雨19 分钟前
C++ 类型转换
开发语言·c++
_poplar_41 分钟前
08.5【C++ 初阶】实现一个相对完整的日期类--附带源码
c语言·开发语言·数据结构·c++·vscode·算法·vim
源远流长jerry1 小时前
STM32之MCU和GPIO
linux·c++·stm32·单片机·嵌入式硬件
汤永红2 小时前
week2-[一维数组]最大元素
数据结构·c++·算法·信睡奥赛
Minecraft红客5 小时前
C++小游戏荒芜的城堡
c++·游戏·娱乐
scx2013100411 小时前
20250814 最小生成树和重构树总结
c++·算法·最小生成树·重构树
weixin_3077791313 小时前
VS Code配置MinGW64编译SQLite3库
开发语言·数据库·c++·vscode·算法
励志不掉头发的内向程序员14 小时前
STL库——string(类函数学习)
开发语言·c++
CallZhang21014 小时前
Vision Master的C#脚本与opencv联合编程
opencv·计算机视觉·c#·视觉检测
一百天成为python专家14 小时前
Python循环语句 从入门到精通
开发语言·人工智能·python·opencv·支持向量机·计算机视觉