本文主要是介绍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窗口大小为3x3anchor
= Point(-1,-1): 进行滤波操作的点,如果是默认值(-1, -1)说明对上述窗口中心点所对应的像素点进行操作normalize
= true: 内核是否被归一化处理,有默认值trueborderType
= 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;}elsecout << "图像加载成功!" << 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 方框滤波的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!