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

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 mysort(Mat& sortarray,int filter_size);


int main(){
    Mat img,img_gray,img_output,img_output2;
    img = imread("/home/v/home.png");
    if (img.empty()){
        cout<<"could not load image"<<endl;
        return -1;
    }
 
    imshow("img",img);
    cvtColor(img,img_gray,COLOR_BGR2GRAY);
    Salt(img_gray,1000);
    imshow("img gray",img_gray);

    //OpenCV自带滤波器
    int a=7;
    medianBlur(img_gray,img_output,a);
    imshow("medianBlur",img_output);

    // 自编函数
    myfilter(a,img_gray,img_output2);
    imshow("myfilter",img_output2);

    waitKey(0);
    return 0;
}

void myfilter(int filter_size,Mat& img_input,Mat& img_output){
    img_output = img_input.clone();
    Mat sortarray(1,filter_size*filter_size,CV_8U);
    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 h = 0;
            for (int m=-k;m<=k;m++){
                for (int n=-k;n<=k;n++){
                    sortarray.at<uchar>(h) = img_input.at<uchar>(i+m,j+n);
                    h++;
                }
            }
            img_output.at<uchar>(i,j) = mysort(sortarray,filter_size*filter_size);
        }
    }
}

// 找中值
int mysort(Mat& sortarray,int filter_size){

    int exchange;
    int m;
    for (int i=1;i<=filter_size-1;i++){
        for (int j=1;j<filter_size-1;j++){
            if (sortarray.at<uchar>(j-1) > sortarray.at<uchar>(j)){
                exchange = sortarray.at<uchar>(j-1);
                sortarray.at<uchar>(j-1) = sortarray.at<uchar>(j);
                sortarray.at<uchar>(j) = exchange;
            }
        }
    }
    return sortarray.at<uchar>((filter_size+1)/2);
}
相关推荐
龙亘川26 分钟前
构建城市公共安全数字底座:亘川智城智慧安防系统全维度解读
java·大数据·开发语言·人工智能·信息可视化
程序喵大人31 分钟前
【C++入门】内存模型与资源管理 - 09 shared_ptr 和 weak_ptr 解决共享,也带来代价
开发语言·c++·资源管理·智能指针·内存模型
Raas1001 小时前
AI网关部署方案?从部署到上线全流程
java·开发语言·人工智能·gateway·ai网关·企业级ai网关·企业级ai产品
专注仿真2 小时前
线性回归和逻辑回归算法详解
开发语言·人工智能·python·大模型训练·控制算法
jimy13 小时前
C++ 中的 `T&&`:右值引用与转发引用
开发语言·c++
呆呆虫123 小时前
用 orjson 加速 SerpBase 响应解析:基准对比与注意事项
开发语言·php
心疼你的一切3 小时前
Python自动发邮件实战定时发报表
大数据·开发语言·python
Wang's Blog4 小时前
Java 项目实战:交友项目 - 用户体系集成总结
java·开发语言·交友
会编程的小孩4 小时前
C++ 定时器
c++
中科三方5 小时前
IPv6检测常见问题:AAAA记录检测不通过是什么原因?
开发语言·php