OpenCV 方框滤波

Posted 流楚丶格念

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了OpenCV 方框滤波相关的知识,希望对你有一定的参考价值。

方框滤波

通过滤波器核K内每个像素值的平均值得到

API boxFilter()

函数原型:

void boxFilter(
	InputArray src, 
	OutputArray dst, 
	int ddepth, 
	Size ksize, 
	Point anchor=Point(-1,-1), 
	bool normalize=true, 
	int borderType=BORDER_DEFAULT 
);

参数:

  • src: 输入图像,可以是Mat类型
  • dst: 经滤波后输出图像
  • ddepth: 目标图像的深度,若设置为-1,则深度与原图像深度相同
  • ksize: Size类型,内核的大小,一般用Size(w, h)表示,如Size(3, 3)表示kernel窗口大小为3x3
  • anchor = Point(-1,-1): 进行滤波操作的点,如果是默认值(-1, -1)说明对上述窗口中心点所对应的像素点进行操作
  • normalize = true: 内核是否被归一化处理,有默认值true
  • borderType = BORDER_DEFAULT: 用于腿短图像外部像素的某种便捷模式,有默认值BORDER_DEFAULT.

代码示例:

下面效果用到了OpenCV 中的 Trackbar ,Trackbar 相关介绍可以参考我的另一篇博文:https://blog.csdn.net/weixin_45525272/article/details/121265662

效果展示:

代码如下:


#include <iostream>
#include <stdio.h>
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>

using namespace std;
using namespace cv;

const int g_nTrackBarMaxValue = 9;      //轨迹条最大值
int g_nTrackBarValue;                   //轨迹条初始值
Mat g_srcImage, g_dstImage;             //定义图像全局变量
int g_nKernelTrackbarValue;             //定义轨迹条的值

void on_kernelTrackbar(int, void*);

int main()
{
	g_srcImage = imread("./test2.jpg");

	//判断图像是否加载成功
	if (g_srcImage.empty())
	{
		cout << "图像加载失败!" << endl;
		return -1;
	}
	else
		cout << "图像加载成功!" << endl << endl;

	namedWindow("原图像", WINDOW_AUTOSIZE);
	imshow("原图像", g_srcImage);            //显示原图像

	g_nTrackBarValue = 1;                   //初始化轨迹条初始值
	namedWindow("方框滤波", WINDOW_AUTOSIZE);      //轨迹条依附窗口
	char kernelName[20];
	sprintf(kernelName, "滤波kernel %d", g_nTrackBarMaxValue);

	//创建轨迹条
	createTrackbar(kernelName, "方框滤波", &g_nTrackBarValue, g_nTrackBarMaxValue, on_kernelTrackbar);
	on_kernelTrackbar(g_nTrackBarValue, 0);

	waitKey(0);

	return 0;
}

void on_kernelTrackbar(int, void*)
{
	//根据输入值重新计算kernel尺寸,见程序详解
	g_nKernelTrackbarValue = g_nTrackBarValue * 2 + 3;

	//方框滤波函数
	boxFilter(g_srcImage, g_dstImage, -1, Size(g_nKernelTrackbarValue, g_nKernelTrackbarValue));
	imshow("方框滤波", g_dstImage);
}

以上是关于OpenCV 方框滤波的主要内容,如果未能解决你的问题,请参考以下文章

OpenCV 方框滤波

OpenCV 方框滤波

学习 opencv--- 线性邻域滤波专场:方框滤波,均值滤波,高斯滤波

opencv入门之五线性滤波(方框滤波均值滤波高斯滤波)

opencv中的方框滤波C++

opencv学习笔记15种图像滤波辨析:方框均值高斯中值双边