C++实现均值滤波器和中值滤波器

本文介绍了如何使用C++实现图像处理中的均值滤波器和中值滤波器。分别给出了两种滤波器的代码实现,特别指出中值滤波器作为非线性滤波器,不适用卷积操作。使用的opencv库版本为3.4.5。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

C++实现均值滤波器和中值滤波器

代码实现均值滤波器和中值滤波器
在这里插入图片描述
由于中值滤波器是非线性滤波,不是卷积,所以均值和中值滤波分开实现。opencv版本为3.4.5

my_convolution.h

#ifndef MY_CONVOLUTION
#define MY_CONVOLUTION

#include <opencv2/opencv.hpp>

class My_Convolution {
   
public:
	My_Convolution();
	~My_Convolution();
	bool load_kernal(const cv::Mat kernal);//加载卷积核
	void convolute(const cv::Mat &image, cv::Mat &dst);//卷积操作

private:
	bool kernal_loaded;//是否已经加载卷积核
	cv::Mat curr_kernal;//当前卷积核
	int bios_x, bios_y;//记录偏移量

	//计算每一个像素的掩模乘积之和
	void compute_sum_of_product(int i, int j, int chan, cv::Mat &complete_image, cv::Mat & dst);
	//将原图像转换成边框补全的图像
	void complete_image_transform(const cv::Mat &image, cv::Mat &dst);
};

#endif // MY_CONVOLUTION

my_convolution.cpp

#include "my_convolution.h"

using namespace std;
using namespace cv;

My_Convolution::My_Convolution() {
   
	kernal_loaded = false;
}
My_Convolution::~My_Convolution() {
   }

//加载卷积核
bool My_Convolution::load_kernal(const Mat kernal) {
   
	if (kernal.cols % 2 == 1 && kernal.rows % 2 == 1) {
   
		curr_kernal = kernal.clone();
		bios_x = (kernal.cols - 1) / 2;
		bios_y = (kernal.rows - 1) / 2;
		kernal_loaded = true;
		return true;
	}
	else {
   
		cout << "The size of kernal is not suitable!" << endl;
		return false;
	}
}

//卷积操作
void<
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值