6.2高斯滤波

news2024/12/24 9:01:12

目录

实验原理

示例代码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.coloradmin.cn/o/2112269.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Pr 入门系列之二:导入与管理素材(下)

◆ ◆ ◆ 管理素材 导入素材后&#xff0c;项目面板中每一个媒体都只是原始素材的“链接”。 所以&#xff0c;视频编辑过程中一般情况下都不会破坏原始素材。 1、在不同视图模式下组织素材 项目面板提供了三大视图 View供选用&#xff1a;列表视图、图标视图以及自由格式视图…

基于VAE和流模型的AIGC技术

哇哦&#xff0c;VAE&#xff08;变分自编码器&#xff09;和流模型在AI生成内容&#xff08;AIGC&#xff09;领域可真是大放异彩呢&#xff01;&#x1f680;&#x1f31f; 它们就像魔法师一样&#xff0c;能够创造出各种各样、高质量的数据&#xff0c;从图像到音频&#xf…

计算机网络(三) —— 简单Udp网络程序

目录 一&#xff0c;初始化服务器 1.0 辅助文件 1.1 socket函数 1.2 填充sockaddr结构体 1.3 bind绑定函数 1.4 字符串IP和整数IP的转换 二&#xff0c;运行服务器 2.1 接收 2.2 处理 2.3 返回 三&#xff0c;客户端实现 3.1 UdpClient.cc 实现 3.2 Main.cc 实现 …

MongoDB 5.0版本副本集集群

一、MongoDB 5.0版本副本集集群部署 什么是MongoDB的副本集 MongoDB的副本集&#xff08;Replica Set&#xff09;是一种用于提高数据库系统可用性、可靠性和数据冗余性的机制。副本集包含一组相互连接的MongoDB节点&#xff0c;其中包括一个主节点&#xff08;Primary&#…

基于web的赴台展会人员管理系统设计与实现

博主介绍&#xff1a;专注于Java .net php phython 小程序 等诸多技术领域和毕业项目实战、企业信息化系统建设&#xff0c;从业十五余年开发设计教学工作 ☆☆☆ 精彩专栏推荐订阅☆☆☆☆☆不然下次找不到哟 我的博客空间发布了1000毕设题目 方便大家学习使用 感兴趣的可以…

VSC++: 括号对称比较

括号的使用规则&#xff1a;大括号&#xff0c;中括号&#xff0c;小括号{[()]}&#xff1b;中括号&#xff0c;小括号[()]&#xff1b;小括号()&#xff1b;大括号、中括号、小括号、中括号、小括号、大括号{[()][()]}&#xff1b;大括号&#xff0c;中括号&#xff0c;小括号…

Reflection 70B:震撼AI行业的开源模型

随着人工智能&#xff08;AI&#xff09;技术的快速发展&#xff0c;开源与闭源模型的竞争变得越来越激烈。近日&#xff0c;Reflection 70B模型的发布在AI行业引发了巨大的震动。这款拥有70亿参数的开源模型不仅在多项基准测试中取得了优异成绩&#xff0c;还在很多情况下超越…

无人机之报警器的工作原理

无人机报警器&#xff08;通常指的是无人机上搭载的某种警报系统或装置&#xff0c;用于在特定条件下触发警报&#xff09;的作用原理可能涉及多个方面&#xff0c;但具体到无人机报警器这一组件&#xff0c;其原理往往与无人机的整体安全监控、电池状态监测或任务执行中的特定…

基于Java+SpringBoot+Vue+MySQL的美发管理系统

作者&#xff1a;计算机学姐 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、JSP、ElementUI等&#xff0c;“文末源码”。 专栏推荐&#xff1a;前后端分离项目源码、SpringBoot项目源码、SSM项目源码 系统展示 基于SpringBootVue的美发管理系统【附源码文档】、前后端分…

揭秘循环购模式:如何实现消费增值与日常收益

欢迎各位&#xff0c;我是吴军&#xff0c;你们的电商策略顾问。今天&#xff0c;我将向大家介绍一种新颖的商业模式——循环购模式&#xff0c;它如何为商家和消费者创造价值。 你可能会好奇&#xff0c;为何会有“消费1000元&#xff0c;赠送2000元”的优惠&#xff1f;以及…

算法练习小技巧之有序集合--套路详细解析带例题(leetcode)

前言: 本文详细讲解Python中的有序集合SortedList和C中的有序集合multiset的用法&#xff0c;配合leetcode的例题来展示实际的用处。(本人水平不够&#xff0c;还无法讲解有序集合的实现方法&#xff0c;只会用) 觉得有帮助或者写的不错可以点个赞&#xff0c;后面也有几道我找…

[数据集][目标检测]抽烟检测数据集VOC+YOLO格式22559张2类别

数据集格式&#xff1a;Pascal VOC格式YOLO格式(不包含分割路径的txt文件&#xff0c;仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数)&#xff1a;22559 标注数量(xml文件个数)&#xff1a;22559 标注数量(txt文件个数)&#xff1a;22559 标…

本机ip地址怎么看是不是公网

在数字化时代&#xff0c;‌了解自己的网络连接属性&#xff0c;‌尤其是本机IP地址是否为公网IP&#xff0c;‌对于网络安全、‌远程访问、‌在线服务配置等方面都至关重要。‌公网IP&#xff0c;‌即互联网上的唯一地址&#xff0c;‌能让任何连接互联网的设备访问到你的设备…

java框架第五课(终极版本)SpringBoot

一.关于SpringBoot (1)回忆Spring 传统的Spring由Spring 框架(ioc,aop)加mybatis加Springweb组成&#xff0c;虽然相比原生的java程序Spring框架帮我们大大减少了代码量&#xff0c;减少了冗余&#xff0c;提高了开发效率但是由于Spring框架下的配置和相关的jar包依赖过多&am…

图像去噪:使用DAMRmF算法

在数字图像处理领域&#xff0c;噪声是不可避免的&#xff0c;它会影响图像的质量和可读性。为了提高图像的质量&#xff0c;去噪算法是必不可少的工具。在这篇文章中&#xff0c;我们将介绍一种名为DAMRmF的去噪算法&#xff0c;并展示如何使用MATLAB实现和应用它。 一、什么…

1-8 图像腐蚀 opencv树莓派4B 入门系列笔记

目录 一、提前准备 二、代码详解 kernelnp.ones((2,2),np.uint8) _, binary_image cv2.threshold(image, 127, 255, cv2.THRESH_BINARY) eroded_imagecv2.erode(binary_image,kernel,iterations1) eroded_image2cv2.erode(image2,kernel,iterations1) 三、运行现象 四…

如何处理忘记实现接口所有方法

在Java编程中&#xff0c;当你声明一个类实现了某个接口时&#xff0c;但没有实现接口中的所有方法&#xff0c;编译器会报错。这是因为接口规定了必须由实现类提供的功能&#xff0c;任何没有实现的接口方法&#xff0c;都会被认为是实现不完整的&#xff0c;导致编译失败。 …

[含视频和源码]CRUD的最佳实践,联动前后端,包含微信小程序,API,HTML等(三)

关说不练假把式&#xff0c;在上一&#xff0c;二篇中介绍了我心目中的CRUD的样子 基于之前的理念&#xff0c;我开发了一个命名为PasteTemplate的项目&#xff0c;这个项目呢后续会转化成项目模板&#xff0c;转化成项目模板后&#xff0c;后续需要开发新的项目就可以基于这…

【时时三省】(C语言基础)指针进阶 例题3

山不在高&#xff0c;有仙则名。水不在深&#xff0c;有龙则灵。 ----CSDN 时时三省 例题&#xff1a; 这个arr里面是放了&#xff3b;a b c d e f \0&#xff3d; 第一个arr 这个sizeof是计算这个数组的大小 这个里面加上\0一共是7个元素 所以打印7 第二个arr0 这个指数组…

OGRE 3D----创建第一个OGRE 3D示例

目录 1. OGRE 3D概述 2. OGRE 3D vs VTK 3. 编译OGRE 3D 源码 4. 创建示例和配置其编译环境 5. 配置示例程序的执行环境 1. OGRE 3D概述 OGRE (Object-Oriented Graphics Rendering Engine) 是一个开源的、高级的 3D 图形渲染引擎&#xff0c;它提供了一个抽象层&#xf…