6.2高斯滤波

目录

实验原理

示例代码1

运行结果1

示例代码2

运行结果2

实验代码3

运行结果3


实验原理

在OpenCV中,高斯滤波(Gaussian Filtering)是一种非常常用的图像平滑处理方法。它通过使用一个高斯核(即高斯分布函数)对图像进行卷积操作来去除噪声,同时保留尽可能多的边缘细节。高斯滤波器具有良好的频率响应特性,并且由于其平滑效果自然,因此在许多计算机视觉和图像处理任务中都有广泛应用。

函数原型

C++: void GaussianBlur(InputArray src, OutputArray dst, Size ksize, double sigmaX, double sigmaY=0, int borderType=BORDER_DEFAULT );参数说明
src:输入图像,它可以是单通道或多通道图像。
dst:输出图像,与输入图像有相同的大小和类型。
ksize:高斯核的大小,通常是一个奇数大小的正方形,例如3x3, 5x5等。
sigmaX:在X方向上的高斯核的标准差;如果设置为0,则根据核大小计算标准差。
sigmaY:在Y方向上的高斯核的标准差;如果设置为0,则假设sigmaY=sigmaX。
borderType:边界处理类型,默认值为BORDER_DEFAULT,表示采用默认的边界扩展方式。可以选择不同的边界处理方式,如BORDER_CONSTANT、BORDER_REFLECT等。边界处理borderType参数决定了如何处理图像边缘的像素。
常见的边界处理方式包括:
•BORDER_CONSTANT:用指定的常数值填充边界。
•BORDER_REPLICATE:边界像素值向外扩展。
•BORDER_REFLECT:反射边界,如12345反射为45454。
•BORDER_WRAP:循环边界,如12345循环为34512。

高斯核的理解
高斯核是一个二维高斯函数的离散化版本,其权重随着距离中心点的距离增加而减少。当sigmaX或sigmaY设为0时,OpenCV会根据ksize自动计算标准差,使得高斯核具有一定的平滑效果。

示例代码1

下面是一个使用cv::GaussianBlur函数进行高斯滤波的示例代码:

#include "pch.h"
#include <opencv2/opencv.hpp>
#include <iostream>int main(int argc, char** argv)
{// 读取图像cv::Mat src = cv::imread("02.png", cv::IMREAD_COLOR);if (src.empty()){std::cout << "Error opening image" << std::endl;return -1;}// 创建输出图像cv::Mat dst;// 定义卷积核大小cv::Size kernelSize(9, 9); // 9x9的核// 设置高斯核的标准差double sigma = 2.0;// 应用高斯滤波cv::GaussianBlur(src, dst, kernelSize, sigma, sigma);// 显示结果cv::namedWindow("Original Image", cv::WINDOW_NORMAL);cv::imshow("Original Image", src);cv::namedWindow("Gaussian Blurred Image", cv::WINDOW_NORMAL);cv::imshow("Gaussian Blurred Image", dst);cv::waitKey(0);return 0;
}代码解释
1. 读取图像:使用cv::imread读取输入图像,并确保它是彩色图像。
2. 创建输出图像:创建一个新的cv::Mat对象来存储模糊后的结果。
3. 定义卷积核大小:定义一个9x9的卷积核大小。
4. 设置高斯核的标准差:设置高斯核的标准差sigma,用于控制高斯函数的宽度。
5. 应用高斯滤波:使用cv::GaussianBlur函数对图像进行高斯滤波。
6. 显示结果:使用cv::imshow函数显示原始图像和高斯模糊后的图像,并等待用户按键退出。

运行结果1

核大小的选择

卷积核的大小(ksize)决定了滤波器的效果。较大的核可以产生更强烈的平滑效果,但可能会丢失更多的细节;较小的核则可以保留更多细节,但平滑效果较弱。

标准差的选择

标准差(sigma)决定了高斯核的形状。较小的sigma值会使高斯核更加集中,较大的sigma值会使高斯核更加平坦。如果sigma设置为0,OpenCV会根据核大小自动计算一个合理的标准差值。

总结

高斯滤波是一种有效的图像平滑技术,通过使用高斯函数作为卷积核来减少噪声并保持图像的重要特征。通过调整卷积核的大小和标准差,可以控制平滑的程度。cv::GaussianBlur函数提供了方便的接口来实现高斯滤波,并且允许用户指定边界处理方式。

示例代码2

#include "pch.h"
#include <opencv2/opencv.hpp>
#include <iostream>int main(int argc, char** argv)
{// 加载图像// 读取图像cv::Mat src = cv::imread("03.png", cv::IMREAD_COLOR);if (!src.data){std::cout << "Error: Could not open or find the image" << std::endl;return -1;}// 定义高斯核大小cv::Size ksize(5, 5); // 通常使用奇数作为核大小// 定义标准差double sigma = 0; // 如果设置为0,则根据核大小自动计算标准差// 创建一个用于存储结果的矩阵cv::Mat dst;// 应用高斯模糊cv::GaussianBlur(src, dst, ksize, sigma);// 显示原图和模糊后的图像cv::namedWindow("Original Image", cv::WINDOW_NORMAL);cv::imshow("Original Image", src);cv::namedWindow("Blurred Image", cv::WINDOW_NORMAL);cv::imshow("Blurred Image", dst);// 等待用户按键后退出cv::waitKey(0);// 清理所有打开的窗口cv::destroyAllWindows();return 0;
}

运行结果2

实验代码3

// test.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//#include "pch.h"
#include <opencv2/opencv.hpp>
#include <iostream>
using namespace cv;
using namespace std;
//#pragma comment(lib, "opencv_world450d.lib")  //引用引入库 
int main(int argc, char** argv)
{Mat src, dst;src = imread("2.jpeg");if (!src.data){printf("could not load image3...\n");return -1;}//定义窗口名称char input_title[] = "源图";char output_title[] = "均值滤波";//新建窗口namedWindow(input_title, WINDOW_NORMAL);//原图波窗口imshow(input_title, src);//原图显示//均值滤波操作blur(src, dst, Size(15, 15), Point(-1, -1));//均值滤波,Size里面都要奇数,正数。内核内数值分别表示宽,高。Point(-1,-1)表示锚点,一般取-1,表示锚点在核中心。namedWindow(output_title, WINDOW_NORMAL);//均值滤波窗口imshow(output_title, dst);Mat gblur;//高斯滤波操作GaussianBlur(src, gblur, Size(15, 15), 11, 11);//高斯滤波namedWindow("高斯滤波", WINDOW_NORMAL);imshow("高斯滤波", gblur);waitKey(0);return 0;
}

运行结果3

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/418175.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

南通网站建设手机版网页

随着移动互联网的迅猛发展&#xff0c;越来越多的人通过手机浏览网页&#xff0c;进行在线购物、信息查询和社交互动。因此&#xff0c;建立一个适合移动端访问的网站已成为企业和个人不可忽视的重要任务。在南通&#xff0c;网站建设手机版网页的需求逐渐增加&#xff0c;如何…

单体到微服务:架构变迁

单体架构与微服务架构&#xff1a;从单体到微服务的演变 引言单体架构概述微服务架构的优势一、功能定位二、使用场景三、配置方式四、性能特点Eureka - 服务注册与发现框架核心功能工作原理优势应用场景 结论 引言 在软件开发的世界中&#xff0c;随着业务的增长和技术的发展…

艾体宝洞察丨透过语义缓存,实现更快、更智能的LLM应用程序

传统的缓存只存储数据而不考虑上下文&#xff0c;语义缓存则不同&#xff0c;它能理解用户查询背后的含义。它使数据访问更快&#xff0c;系统响应更智能&#xff0c;对 GenAI 应用程序至关重要。 什么是语义缓存&#xff1f; 语义缓存解释并存储用户查询的语义&#xff0c;使…

MQTT broker搭建并用SSL加密

系统为centos&#xff0c;基于emqx搭建broker&#xff0c;流程参考官方。 安装好后&#xff0c;用ssl加密。 进入/etc/emqx/certs,可以看到 分别为 cacert.pem CA 文件cert.pem 服务端证书key.pem 服务端keyclient-cert.pem 客户端证书client-key.pem 客户端key 编辑emqx配…

云计算之大数据(下)

目录 一、Hologres 1.1 产品定义 1.2 产品架构 1.3 Hologres基本概念 1.4 最佳实践 - Hologres分区表 1.5 最佳实践 - 分区字段设置 1.6 最佳实践 - 设置字段类型 1.7 最佳实践 - 存储属性设置 1.8 最佳实践 - 分布键设置 1.9 最佳实践 - 聚簇键设置 1.10 最佳实践 -…

12. GIS地图制图工程师岗位职责、技术要求和常见面试题

本系列文章目录&#xff1a; 1. GIS开发工程师岗位职责、技术要求和常见面试题 2. GIS数据工程师岗位职责、技术要求和常见面试题 3. GIS后端工程师岗位职责、技术要求和常见面试题 4. GIS前端工程师岗位职责、技术要求和常见面试题 5. GIS工程师岗位职责、技术要求和常见面试…

多线程 | ThreadLocal源码分析

文章目录 1. ThreadLocal解决了什么问题数据隔离避免参数传递资源管理 2. ThreadLocal和Synchronized3. ThreadLocal核心核心特性常见方法使用场景注意事项 4. ThreadLocal如何实现线程隔离的&#xff1f;&#xff08;重点&#xff09;ThreadLocal 的自动清理与内存泄漏问题阿里…

浙大数据结构:02-线性结构3 Reversing Linked List

数据结构MOOC PTA习题 这道题也是相当费事&#xff0c;不过比上一个题好一些&#xff0c;这里我使用了C的STL库&#xff0c;使得代码量大幅减少。 题干机翻&#xff1a; 1、条件准备 这里我准备采用map来存地址和值&#xff0c;因为map的查找效率也是不错的 数组arr是存链…

GPU环境配置:1.CUDA、Anaconda、Pytorch

一、查看显卡适配CUDA型号 查看自己电脑的显卡版本&#xff1a; 在 Windows 设置中查看显卡型号&#xff1a;使用 Windows I 快捷键打开「设置」&#xff0c;依次点击「系统」-「屏幕」和「高级显示器设置」&#xff0c;在「显示器 1」旁边就可以看到显卡名称。 右键点菜单图标…

43. 1 ~ n 整数中 1 出现的次数【难】

comments: true difficulty: 中等 edit_url: https://github.com/doocs/leetcode/edit/main/lcof/%E9%9D%A2%E8%AF%95%E9%A2%9843.%201%EF%BD%9En%E6%95%B4%E6%95%B0%E4%B8%AD1%E5%87%BA%E7%8E%B0%E7%9A%84%E6%AC%A1%E6%95%B0/README.md 面试题 43. 1 &#xff5e; n 整数中 1 …

前端 Vue3 项目开发—— ESLint prettier 配置代码风格

ESLint & prettier 介绍 如果你用的是 pnpm create vue 来创建项目&#xff0c;那么创建项目时就会让你选择是否添加 ESLint 和 prettier 我们在上一篇博客中详细介绍过 ESLint&#xff0c;可以说上一篇博客是这篇博客的先修知识&#xff0c;所以各位小伙伴们请先去看看我…

LiveQing视频点播流媒体RTMP推流服务功能-支持大疆等无人机RTMP推流支持OBS推流一步一步搭建RTMP视频流媒体服务示例

LiveQing支持大疆等无人机RTMP推流支持OBS推流一步一步搭建RTMP视频流媒体服务示例 1、流媒体服务搭建2、推流工具准备3、创建鉴权直播间4、获取推流地址5、配置OBS推流6、推流及播放7、获取播放地址7.1 页面查看视频源地址7.2 接口查询 8、相关问题8.1、大疆无人机推流花屏 9、…

【每日刷题】Day111

【每日刷题】Day111 &#x1f955;个人主页&#xff1a;开敲&#x1f349; &#x1f525;所属专栏&#xff1a;每日刷题&#x1f34d; &#x1f33c;文章目录&#x1f33c; 1. LCR 047. 二叉树剪枝 - 力扣&#xff08;LeetCode&#xff09; 2. LCR 049. 求根节点到叶节点数字…

怎么在mathtype中打空格 MathType空格键不能用

MathType是一款数学公式编辑器&#xff0c;可以帮助用户创建复杂的数学公式和方程式。它提供了一个用户友好的界面&#xff0c;使得编辑和排版数学公式变得更加容易和高效。用户可以直接在其界面中输入公式&#xff0c;也可以将已有的公式从其他文档中复制粘贴过来进行编辑。在…

【STM32CubeMX】MPU6050移植DMP流程

原本是想要自己的模拟I2C库&#xff0c;来组合时选块&#xff0c;对接上DMP所需接口&#xff0c;可是一直卡在初始化&#xff0c;后面改成STM32F4的硬件I2C&#xff0c;也是很便捷的对接上接口了。此外在也参考了网上的移植资料与记录。本文也作为学习笔记&#xff0c;记录下过…

Java项目: 基于SpringBoot+mybatis+maven+mysql教师工作量管理系统(含源码+数据库+毕业论文)

一、项目简介 本项目是一套基于SpringBootmybatismavenmysql教师工作量管理系统 包含&#xff1a;项目源码、数据库脚本等&#xff0c;该项目附带全部源码可作为毕设使用。 项目都经过严格调试&#xff0c;eclipse或者idea 确保可以运行&#xff01; 该系统功能完善、界面美观…

软件测试 - 性能测试 (概念)(并发数、吞吐量、响应时间、TPS、QPS、基准测试、并发测试、负载测试、压力测试、稳定性测试)

一、性能测试 目标&#xff1a;能够对个人编写的项目进行接口的性能测试。 一般是功能测试完成之后&#xff0c;最后做性能测试。性能测试是一个很大的范围&#xff0c;在学习过程中很难直观感受到性能。 以购物软件为例&#xff1a; 1&#xff09;购物过程中⻚⾯突然⽆法打开…

JRebel and XRebel离线安装

近期&#xff0c;使用JRebel and XRebel&#xff0c;发现总是安装不上&#xff0c;可能是网络的原因吧。所以就使用离线方式进行安装。 JRebel 是一款用于 Java 开发的生产力工具。它的主要功能是加速开发周期&#xff0c;通过在不重启 JVM 的情况下即时加载代码变更。这样&…

在VB.net中,如何把20240906转化成日期格式

标题 vb.net中&#xff0c;如何把20240906转化成日期格式 正文 在 VB.NET 中&#xff0c;将一个数字字符串&#xff08;如 "20240906"&#xff09;转换为日期格式&#xff0c;你可以使用 DateTime.Parse 或 DateTime.TryParse 方法。这些方法可以将符合日期格式的字符…

Github 2024-09-07Rust开源项目日报Top10

根据Github Trendings的统计,今日(2024-09-07统计)共有10个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量Rust项目10CUE项目1Python项目1Go项目1Polars: Rust中的DataFrame接口和OLAP查询引擎 创建周期:1354 天开发语言:Rust, Python协议类型:MIT …