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窗口大小为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;
}
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 方框滤波的主要内容,如果未能解决你的问题,请参考以下文章