线性滤波

部署运行你感兴趣的模型镜像

 

一、方框滤波

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

二、均值滤波

 

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

 

 

三、高斯滤波

1 void GaussianBlur( InputArray src, OutputArray dst, Size ksize,
2                                 double sigmaX, double sigmaY = 0,
3                                 int borderType = BORDER_DEFAULT );

 


 

 1 #include<opencv2/opencv.hpp>
 2 #include<iostream>
 3 
 4 using namespace std;
 5 using namespace cv;
 6 
 7 Mat g_srcImage, g_dstImage1, g_dstImage2, g_dstImage3;
 8 int g_nBoxFilterValue = 3;  //方框滤波参数值
 9 int g_nMeanBlurValue = 3;   //均值滤波参数值
10 int g_nGaussianBlurValue = 3;  //高斯滤波参数值
11 
12 static void on_BoxFilter(int, void *);   //方框滤波
13 static void on_MeanBlur(int, void *);   //均值滤波
14 static void on_GaussianBlur(int, void *);  //高斯滤波
15 
16 int main() {
17     //改变console字体颜色
18     system("color 5E");
19 
20     //载入原图
21     g_srcImage = imread("C:\\Users\\Administrator\\Pictures\\Camera Roll\\05.jpg");
22     if (!g_srcImage.data) {
23         printf("读取srcIamge错误!\n");
24         return false;
25     }
26 
27     //复制原图到三个Mat类型中
28     g_dstImage1 = g_srcImage.clone();
29     g_dstImage2 = g_srcImage.clone();
30     g_dstImage3 = g_srcImage.clone();
31 
32     //显示原图
33     namedWindow("【原图窗口】", 1);
34     imshow("【原图窗口】", g_srcImage);
35 
36     //=====【方框滤波】======
37     //创建窗口
38     namedWindow("【方框滤波】",1);
39     //创建轨迹条
40     createTrackbar("内核值:", "【方框滤波】", &g_nBoxFilterValue, 40, on_BoxFilter);
41     on_BoxFilter(g_nBoxFilterValue, 0);
42     
43 
44     //=====【均值滤波】======
45     //创建窗口
46     namedWindow("【均值滤波】", 1);
47     //创建轨迹条
48     createTrackbar("内核值:", "【均值滤波】", &g_nMeanBlurValue, 40, on_MeanBlur);
49     on_MeanBlur(g_nMeanBlurValue, 0);
50     
51 
52     //=====【高斯滤波】======
53     //创建窗口
54     namedWindow("【高斯滤波】", 1);
55     //创建轨迹条
56     createTrackbar("内核值:", "【高斯滤波】", &g_nGaussianBlurValue, 40, on_GaussianBlur);
57     on_GaussianBlur(g_nGaussianBlurValue, 0);
58 
59     while (char(waitKey(1) != 'q')) {}
60     
61     return 0;
62 }
63 
64 static void on_BoxFilter(int, void *) {   //方框滤波
65     //方框滤波操作
66     boxFilter(g_srcImage, g_dstImage1, -1, Size(g_nBoxFilterValue + 1, g_nBoxFilterValue + 1));
67     //显示窗口
68     imshow("【方框滤波】", g_dstImage1);
69 }
70 static void on_MeanBlur(int, void *) {   //均值滤波
71     //均值滤波操作
72     blur(g_srcImage, g_dstImage2, Size(g_nMeanBlurValue + 1, g_nMeanBlurValue + 1), Point(-1, -1));
73     //显示窗口
74     imshow("【均值滤波】", g_dstImage2);
75 }
76 static void on_GaussianBlur(int, void *) {  //高斯滤波
77     //高斯滤波操作
78     GaussianBlur(g_srcImage, g_dstImage3, Size(g_nGaussianBlurValue * 2 + 1, g_nGaussianBlurValue * 2 + 1), 0, 0);
79     //显示窗口
80     imshow("【高斯滤波】", g_dstImage3);
81 }

 

转载于:https://www.cnblogs.com/Nelsoner/p/6776232.html

您可能感兴趣的与本文相关的镜像

Yolo-v8.3

Yolo-v8.3

Yolo

YOLO(You Only Look Once)是一种流行的物体检测和图像分割模型,由华盛顿大学的Joseph Redmon 和Ali Farhadi 开发。 YOLO 于2015 年推出,因其高速和高精度而广受欢迎

线性滤波和非线性滤波均为在空域对图像进行滤波处理的方式,滤波时会对原图像每个像素周围一定范围内的像素进行运算,此运算范围称为掩膜或领域 [^1]。 ### 原理 - **线性滤波**:对各像素灰度值进行简单处理(如乘一个权值)后求和 [^1]。 - **非线性滤波**:其运算并非简单的对各像素灰度值加权求和,像中值滤波是选取邻域内像素灰度值的中值作为输出像素值。在非线性问题中,线性近似应用于非线性函数会产生不准确结果,多次迭代中误差偏向一个方向可能导致卡尔曼滤波器发散,即便不发散结果也非最优 [^2][^3]。 ### 特点 - **线性滤波**:计算相对简单、速度快,可通过卷积操作高效实现。但对噪声的抑制能力有限,均值滤波中噪声成分会加入平均计算,输出易受噪声影响 [^2]。 - **非线性滤波**:中值滤波中噪声成分很难被选上,基本不影响输出,对脉冲噪声、椒盐噪声等有较好的抑制效果,能较好地保护图像边缘信息。不过,中值滤波花费的时间是均值滤波的 5 倍以上,计算复杂度较高 [^2]。 ### 应用对比 - **线性滤波**:常用于图像平滑、去噪等场景,例如高斯滤波是一种常见的线性滤波,可用于图像模糊处理、减少图像中的高频噪声,在图像预处理阶段应用广泛 [^4]。 - **非线性滤波**:适用于需要保留图像细节、去除噪声的场景,如中值滤波常用于去除椒盐噪声,在医学图像处理、天文图像处理等领域应用较多,可在去除噪声的同时保留图像的重要特征 [^2]。 ### 代码示例 以下是使用 Python 和 OpenCV 实现均值滤波线性滤波)和中值滤波(非线性滤波)的代码: ```python import cv2 import numpy as np # 读取图像 image = cv2.imread('example.jpg', 0) # 均值滤波 blurred_mean = cv2.blur(image, (3, 3)) # 中值滤波 blurred_median = cv2.medianBlur(image, 3) # 显示结果 cv2.imshow('Original Image', image) cv2.imshow('Mean Filtered Image', blurred_mean) cv2.imshow('Median Filtered Image', blurred_median) cv2.waitKey(0) cv2.destroyAllWindows() ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值