【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);
}
相关推荐
麦兜*5 小时前
Swift + Xcode 开发环境搭建终极指南
开发语言·ios·swiftui·xcode·swift·苹果vision pro·swift5.6.3
lxmyzzs6 小时前
pyqt5无法显示opencv绘制文本和掩码信息
python·qt·opencv
mit6.8246 小时前
[openvela] Hello World :从零开始的完整实践与问题复盘
c++·嵌入式硬件
萧鼎7 小时前
Python pyzmq 库详解:从入门到高性能分布式通信
开发语言·分布式·python
艾伦~耶格尔7 小时前
【集合框架LinkedList底层添加元素机制】
java·开发语言·学习·面试
yujkss7 小时前
Python脚本每天爬取微博热搜-终版
开发语言·python
yzx9910137 小时前
小程序开发APP
开发语言·人工智能·python·yolo
啊阿狸不会拉杆8 小时前
《算法导论》第 32 章 - 字符串匹配
开发语言·c++·算法
小学生的信奥之路8 小时前
洛谷P3817题解:贪心算法解决糖果分配问题
c++·算法·贪心算法
曙曙学编程9 小时前
stm32——GPIO
c语言·c++·stm32·单片机·嵌入式硬件