OpenCV学习笔记 imgproc库1.线性滤波

15 篇文章 0 订阅
2 篇文章 0 订阅
这篇博客介绍了OpenCV中实现线性滤波的原理,特别是方框滤波和高斯滤波。方框滤波通过设置一个全1的核并可选地进行归一化来平滑图像,常用于均值滤波。高斯滤波则是使用高斯核对图像进行滤波,可用于消除噪声。文中提供了C++代码示例,演示了如何使用`blur()`和`GaussianBlur()`函数进行滤波操作,展示了滤波前后的图像效果。
摘要由CSDN通过智能技术生成

使用-快速上手

参考该博客 三.浅出 部分

原理

线性滤波输出像素值,f为输入图像,h为核
g ( i , j ) = ∑ k , l f ( i + k , j + l ) ∗ h ( k , l ) g(i,j)=\sum\limits_{k,l} f(i+k,j+l)*h(k,l) g(i,j)=k,lf(i+k,j+l)h(k,l)

方框滤波

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

参数

  • src输入图像
  • dst目标图像
  • ddepth输出图像的深度,-1代表使用原图深度
  • ksize内核的大小,用Size(w,h)表示,w为像素宽度,h为像素高度
  • anchor锚点,如果该点坐标为负值表示取核的中心点为锚点
  • normalize内核是否被其区域归一化
  • borderType用于推断图像外部像素的某种边界模式

该函数所用的核为
K = a [ 1 ⋯ 1 ⋮ ⋱ ⋮ 1 ⋯ 1 ] K=a \left [ \begin{matrix} 1 & \cdots & 1 \\ \vdots & \ddots & \vdots \\ 1 & \cdots & 1 \end{matrix} \right ] K=a1111
当normalize=true时, a = 1 w ∗ h a=\frac{1}{w*h} a=wh1
当normalize=false时, a = 1 a=1 a=1
下面说到的均值滤波其实就是normalize=true时的方框滤波

均值滤波

实际上这个函数基本上就是直接调用了boxFilter()

void blur(InputArray src, OutputArray dst, Size ksize, Point anchor=Point(-1,-1), int borderType=BORDER_DEFAULT);

参数基本同上

高斯滤波


使用示例

#include <opencv2/opencv.hpp>

using namespace cv;

int main(int argc, char* argv[])
{
	Mat src; 
	src = imread("D:/Doucuments/temp/opencv_cpp/aete.jpg"); 
	Mat bdst, gbdst;
	
	blur(src, bdst, Size(20, 20));
	GaussianBlur(src, gbdst, Size(11, 11), 10, 10);
	
	namedWindow("src");
	namedWindow("blur");
	namedWindow("gblur");
	
	imshow("src", src);
	imshow("blur", bdst);
	imshow("gblur", gbdst);
	
	waitKey(0);
	return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值