当前位置: 首页 > news >正文

手把手教你OpenCV常见滤波(高斯,中值,均值)C++

目录

1 图像处理中的高斯函数

1.1一维高斯函数

1.2二维高斯函数

1.3 代码

1.4 结果

2 低通滤波之均值滤波器

2.1、空间滤波基础

2.1.1线性空间滤波原理

2.1.2 相关与卷积

2.2、平滑滤波之均值滤波器

2.2.1原理

2.2.2 c++ opencv代码

2.2.3  结果

3 中值滤波

3.1 c++ opencv代码

3.2  结果


1 图像处理中的高斯函数

1.1一维高斯函数

在统计学与概率论中,高斯函数是正态分布(高斯分布)的密度函数。一维高斯表达式如下:

其中,其中a、b与 c为实数常数,且a > 0.
a表示得到曲线的高度;
b(μ)是指曲线在x轴的中心;
c(σ)指width(与半峰全宽有关);

1.2二维高斯函数

二维高斯表达式:

1.3 代码

噪声程序.h文件:

#pragma once
#include<iostream>
#include<opencv2/opencv.hpp>
#include <random>using namespace cv;
using namespace std;void Salt(Mat image, int n);

噪声程序.cpp文件:

#include "Salt.h"void Salt(Mat image, int n)
{default_random_engine generater;uniform_int_distribution<int>randomRow(0, image.rows - 1);uniform_int_distribution<int>randomCol(0, image.cols - 1);int i, j;for (int k = 0; k < n; k++){i = randomCol(generater);j = randomRow(generater);if (image.channels() == 1){image.at<uchar>(j, i) = 255;}else if (image.channels() == 3){image.at<Vec3b>(j, i)[0] = 255;image.at<Vec3b>(j, i)[1] = 255;image.at<Vec3b>(j, i)[2] = 255;}}
}

主函数:

#include<iostream>
#include<opencv2/opencv.hpp>
#include"Salt.h"using namespace cv;
using namespace std;//定义高斯滤波函数
void myfilter(int filter_size, Mat& image_input, Mat& image_output);int main()
{Mat image, image_gray, image_output, image_output2;   //定义输入图像,灰度图像,输出图像image = imread("./img_all/2.png");  //读取图像;if (image.empty()){cout << "读取错误" << endl;return -1;}imshow("image", image);cvtColor(image, image_gray, COLOR_BGR2GRAY);Salt(image_gray, 1000);   //添加噪声imshow("image_gray", image_gray);//opencv自带高斯滤波函数int a = 7;GaussianBlur(image_gray, image_output, Size(a, a), 2, 2);imshow("image_output", image_output);waitKey(0);  //暂停,保持图像显示,等待按键结束return 0;
}

1.4 结果

2 低通滤波之均值滤波器

2.1、空间滤波基础

2.1.1线性空间滤波原理

线性空间滤波器在图像f和滤波器核w之间执行乘积之和运算。用邻域像素改变中心像素的灰度值大小。

2.1.2 相关与卷积

相关以上面的滤波运算方法对图像进行遍历处即使w每个像素能够访问图像f中每个像素。卷积运算时将滤波器核w旋转180°再处理。

2.2、平滑滤波之均值滤波器

2.2.1原理

均值滤波就是将区域内的像素灰度值的平均值作为中心像素的灰度值,一个3*3大小的均值滤波器核如下:

2.2.2 c++ opencv代码

主程序:

#include<iostream>
#include<opencv2/opencv.hpp>
#include"Salt.h"using namespace cv;
using namespace std;int main()
{Mat image, image_gray, image_output, image_output2;   //定义输入图像,灰度图像,输出图像image = imread("./img_all/2.png");  //读取图像;if (image.empty()){cout << "读取错误" << endl;return -1;}imshow("image", image);cvtColor(image, image_gray, COLOR_BGR2GRAY);Salt(image_gray, 1000);   //添加噪声imshow("image_gray", image_gray);//opencv自带程序blur(image_gray, image_output, Size(7, 7));imshow("image_output", image_output);waitKey(0);  //暂停,保持图像显示,等待按键结束return 0;
}
2.2.3  结果

3 中值滤波

中值滤波就是取周围邻域像素灰度值值的中值作为中心像素灰度值结果。

3.1 c++ opencv代码

主程序:

#include<iostream>
#include<opencv2/opencv.hpp>
#include"Salt.h"using namespace cv;
using namespace std;int main()
{Mat image, image_gray, image_output, image_output2;   //定义输入图像,灰度图像,输出图像image = imread("./img_all/2.png");  //读取图像;if (image.empty()){cout << "读取错误" << endl;return -1;}imshow("image", image);cvtColor(image, image_gray, COLOR_BGR2GRAY);Salt(image_gray, 1000);   //添加噪声imshow("image_gray", image_gray);//opencv自带滤波函数int a = 7;medianBlur(image_gray, image_output, a);imshow("image_output", image_output);waitKey(0);  //暂停,保持图像显示,等待按键结束return 0;
}

3.2  结果

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Spring中是如何实现IoC和DI的?
  • JVM—运行时数据区域
  • 大语言模型时代的挑战与机遇:青年发展、教育变革与就业前景
  • DataStream Connector的JDBC Sink
  • [知识点]-[最小生成树]
  • 搭建Nginx正向代理服务器,轻松实现外部网络请求的转发
  • 从繁琐到高效:智慧校园宿舍管理的卫生检查功能改革
  • 【开源商城系统】
  • Unbuntu 服务器- Anaconda安装激活 + GPU配置
  • 与用户有关的接口
  • 数论第四节:二元一次不定方程、勾股数
  • Swift-语法基础
  • DeferredResult 是如何实现异步处理请求的
  • 安装 pyenv
  • MATLAB进阶:数据的拟合
  • 「面试题」如何实现一个圣杯布局?
  • 【Redis学习笔记】2018-06-28 redis命令源码学习1
  • 2018天猫双11|这就是阿里云!不止有新技术,更有温暖的社会力量
  • Cumulo 的 ClojureScript 模块已经成型
  • JavaWeb(学习笔记二)
  • python docx文档转html页面
  • SegmentFault 社区上线小程序开发频道,助力小程序开发者生态
  • SpingCloudBus整合RabbitMQ
  • supervisor 永不挂掉的进程 安装以及使用
  • Unix命令
  • 基于Volley网络库实现加载多种网络图片(包括GIF动态图片、圆形图片、普通图片)...
  • 聊聊flink的BlobWriter
  • 前端面试之闭包
  • 使用权重正则化较少模型过拟合
  • 用jQuery怎么做到前后端分离
  • ​LeetCode解法汇总2808. 使循环数组所有元素相等的最少秒数
  • #{} 和 ${}区别
  • #NOIP 2014# day.1 T3 飞扬的小鸟 bird
  • (8)STL算法之替换
  • (delphi11最新学习资料) Object Pascal 学习笔记---第8章第2节(共同的基类)
  • (php伪随机数生成)[GWCTF 2019]枯燥的抽奖
  • (Redis使用系列) Springboot 实现Redis消息的订阅与分布 四
  • (黑客游戏)HackTheGame1.21 过关攻略
  • (十五)devops持续集成开发——jenkins流水线构建策略配置及触发器的使用
  • (详细版)Vary: Scaling up the Vision Vocabulary for Large Vision-Language Models
  • (一)SvelteKit教程:hello world
  • (已更新)关于Visual Studio 2019安装时VS installer无法下载文件,进度条为0,显示网络有问题的解决办法
  • (终章)[图像识别]13.OpenCV案例 自定义训练集分类器物体检测
  • (转)C#调用WebService 基础
  • (转)socket Aio demo
  • (转载)VS2010/MFC编程入门之三十四(菜单:VS2010菜单资源详解)
  • (轉貼) VS2005 快捷键 (初級) (.NET) (Visual Studio)
  • .NET Core使用NPOI导出复杂,美观的Excel详解
  • .net生成的类,跨工程调用显示注释
  • @antv/g6 业务场景:流程图
  • @PostConstruct 注解的方法用于资源的初始化
  • @Resource和@Autowired的区别
  • @WebService和@WebMethod注解的用法
  • [240903] Qwen2-VL: 更清晰地看世界 | Elasticsearch 再次拥抱开源!
  • [3300万人的聊天室] 作为产品的上游公司该如何?