【C++】【Opencv】cv::GaussianBlur、cv::filter2D()函数详解和示例

本文通过函数详解和运行示例对cv::GaussianBlur和cv::filter2D()两个函数进行解读,最后综合了两个函数的关系和区别,以帮助大家理解和使用。

目录

  • cv::GaussianBlur()
    • 函数详解
    • 运行示例
  • filter2D()
    • 函数详解
    • 运行示例
  • 总结
    • 两个函数联系
    • 两个函数区别

cv::GaussianBlur()

函数详解

cv::GaussianBlur 是 OpenCV 库中的一个函数,用于对图像进行高斯模糊。高斯模糊是一种常见的图像降噪技术,它通过使用高斯函数对图像进行卷积来减少噪声和细节。

函数原型如下:

void cv::GaussianBlur(InputArray src, OutputArray dst, Size ksize, double sigmaX, double sigmaY, int borderType)参数解释:src:输入图像。
dst:输出图像。
ksize:高斯核的大小。它必须是奇数,如 (3, 3), (5, 5), (7, 7) 等。
sigmaX:X方向的标准差。这是高斯核在X方向上的宽度。
sigmaY:Y方向的标准差。这是高斯核在Y方向上的宽度。如果sigmaY为0,则函数会自动根据kernel大小来计算sigmaY,如果sigmaX和sigmaY都为0,那么这两个参数都会被设置为cv::DBL_MAX。如果sigmaY不为0而sigmaX为0,那么sigmaX会被设置为等于sigmaY。
borderType:像素外插法,有默认值。

运行示例

#include <opencv2/opencv.hpp>
#include <iostream>using namespace cv;
using namespace std;int main() {Mat image = imread("image.jpg", IMREAD_COLOR); // 读取输入图像if (image.empty()) {cout << "无法读取图像文件" << endl;return -1;}Mat blurredImage;GaussianBlur(image, blurredImage, Size(5, 5), 1.0, 1.0); // 对图像进行高斯模糊处理imshow("Original Image", image); // 显示原始图像imshow("Blurred Image", blurredImage); // 显示模糊后的图像waitKey(0); // 等待按键return 0;
}

在这个示例中,我们首先读取一个图像文件,然后使用 cv::GaussianBlur() 对其进行高斯模糊处理。注意,在调用 cv::GaussianBlur() 时,我们需要指定高斯核的大小和标准差参数。最后,我们使用 imshow() 来显示原始图像和模糊后的图像。
在这里插入图片描述
上面为原图,下面为滤波后图像。可以看出远处的高楼变得模糊了。可以调整核大小和偏差修改相应的效果。
在这里插入图片描述

filter2D()

函数详解

filter2D() 是 OpenCV 库中的一个函数,用于对图像进行线性滤波。它使用指定的核来对输入图像进行卷积,以实现平滑、锐化、边缘检测等效果。

void cv::filter2D(InputArray src, OutputArray dst, int ddepth, InputArray kernel, Point anchor=Point(-1,-1), double delta=0, int borderType=BORDER_DEFAULT)参数解释:src:输入图像。
dst:输出图像。
ddepth:输出图像的深度,通常为 CV_8U、CV_16U、CV_16S、CV_32F 或 CV_64F。
kernel:指定的滤波核。它是一个包含多个元素(至少为 3x3)的矩阵,用于定义滤波操作的性质。
anchor:锚点。指定了卷积核相对于图像中心的偏移量。默认值为 Point(-1,-1),表示锚点在图像中心。
delta:增量值。用于调整输出图像的像素值。
borderType:像素外插法。指定了处理边界像素的方式。

运行示例

#include <opencv2/opencv.hpp>
#include <iostream>using namespace cv;
using namespace std;int main() {Mat image = imread("image.jpg", IMREAD_COLOR); // 读取输入图像if (image.empty()) {cout << "无法读取图像文件" << endl;return -1;}Mat blurredImage;int kernelSize = 5; // 高斯核大小double sigmaX = 1.0; // X方向标准差double sigmaY = 1.0; // Y方向标准差GaussianBlur(image, blurredImage, Size(kernelSize, kernelSize), sigmaX, sigmaY); // 对图像进行高斯模糊处理imwrite("output.jpg", blurredImage);Mat kernel = (Mat_<float>(3, 3) << 1, 4, 1, 4, 16, 4, 1, 4, 1); // 高斯滤波器filter2D(blurredImage, blurredImage, -1, kernel); // 应用滤波器imshow("Original Image", image); // 显示原始图像imshow("filter2D Image ", blurredImage); imwrite("output1.jpg", blurredImage);waitKey(0); // 等待按键return 0;
}

在这个示例中,我首先使用 cv::GaussianBlur() 对图像进行高斯模糊处理。然后,我创建了一个高斯滤波器,并使用 cv::filter2D() 对模糊后的图像进行滤波处理。最后,我使用 imshow() 来显示原始图像和模糊后的图像。
具体效果如下,下面是原图。
在这里插入图片描述
下面的是模糊处理后的效果图。
在这里插入图片描述
上面是模糊处理后的效果图,下面是经过filter2D函数处理后的效果图,可以通过调整核函数大小调整效果。
在这里插入图片描述

总结

两个函数联系

(1)cv::GaussianBlur()是使用高斯滤波器对图像进行模糊处理,而cv::filter2D()可以应用各种滤波器对图像进行滤波处理。

(2)在使用cv::GaussianBlur()时,需要指定高斯核的大小和标准差参数;而在使用cv::filter2D()时,需要指定一个滤波器作为参数,该滤波器可以是一个自定义的滤波器,也可以是高斯滤波器。

两个函数区别

(1)cv::GaussianBlur()仅适用于高斯模糊处理,而cv::filter2D()可以应用于各种滤波器,包括高斯滤波器、中值滤波器、边缘检测滤波器等。
(2)cv::GaussianBlur()函数需要提供滤波器中系数的数量作为函数的第3个参数,而cv::filter2D()函数不需要提供滤波器中系数的数量。
(3)cv::GaussianBlur()函数仅支持对图像进行二维滤波处理,而cv::filter2D()函数可以支持对图像进行二维或三维滤波处理。

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

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

相关文章

DP4306F—Sub-1G无线收发通信芯片

DP4306F是一款高性能低功耗的单片集成收发机&#xff0c;工作频率可覆盖200MHz~1000MHz&#xff0c;集成M0核MCU&#xff0c;支持230 / 408 / 433 / 470 / 868 / 915频段。该芯片集成了射频接收器、射频发射器、频 率综合器、GFSK调制器、GFSK解调器等功能模块。通过SPI接口可以…

NSS [MoeCTF 2021]2048

NSS [MoeCTF 2021]2048 hint&#xff1a;想想你游戏结束时你所获得的分数被作为能否获得flag的衡量标准是如何实现的&#xff1f; 正常思路找返回flag的js语句&#xff0c;一般为alert() 但是行不通 玩一遍游戏&#xff0c;失败了&#xff0c;看看返回的提示要50000分 结合hi…

振南技术干货集:比萨斜塔要倒了,倾斜传感器快来!(1)

注解目录 1、倾斜传感器的那些基础干货 1.1 典型应用场景 &#xff08;危楼、边坡、古建筑都是对倾斜敏感的。&#xff09; 1.2 倾斜传感器的原理 1.2.1 滚珠式倾斜开关 1.2.2 加速度式倾斜传感器 1)直接输出倾角 2)加速度计算倾角 3)倾角精度的提高 &#xff08;如果…

ubuntu中cuda12.1配置(之前存在11.1版本的cuda)(同时配置两个版本)

ubuntu中cuda12.1配置 由于YOLOv8项目中Pytorch版本需要cuda12.1版本 在官网下载12.1版本的deb包 官网地址 sudo dpkg -i cuda-keyring_1.0-1_all.deb sudo apt-get update sudo apt-get -y install cuda然后需要修改bashrc文件&#xff08;隐藏文件&#xff09; 添加 exp…

操作系统OS/存储管理/内存管理/内存管理的主要功能_基本原理_要求

基本概念 内存管理的主要功能/基本原理/要求 **内存管理的主要功能&#xff1a; ** 内存空间的分配与回收。由操作系统完成主存储器空间的分配和管理&#xff0c;使程序员摆脱存储分配的麻烦&#xff0c;提高编程效率。地址转换。在多道程序环境下&#xff0c;程序中的逻辑地…

什么是游戏盾?怎么进行防护?

一.德迅游戏盾&#xff08;抗D盾&#xff09;概述 1.抗D盾是针对游戏行业推出的高度可定制的网络安全解决方案&#xff0c;可以针对大型DDoS攻击(T级别)进行有效防御&#xff0c;同时能彻底解决游戏行业特有的TCP协议的CC攻击问题。 2.抗D盾是新一代的智能分布式云接入系统&a…

Centos7.9用rancher来快速部署K8S

什么是 Rancher&#xff1f; Rancher 是一个 Kubernetes 管理工具&#xff0c;让你能在任何地方和任何提供商上部署和运行集群。 Rancher 可以创建来自 Kubernetes 托管服务提供商的集群&#xff0c;创建节点并安装 Kubernetes&#xff0c;或者导入在任何地方运行的现有 Kube…

vue3别名配置(vite)

1、配置别名的优点&#xff1a; 在VUE项目中import导入文件时&#xff0c;可以写相对路径. 2、在vite.config.js中配置 a. 首先引入path import path from "path"/* */ b.在resolve添加别名&#xff0c;例如&#xff1a; alias:{"~":path.resolve(__di…

vscode终端npm install报错

报错如下&#xff1a; npm WARN read-shrinkwrap This version of npm is compatible with lockfileVersion1, but package-lock.json was generated for lockfileVersion2. Ill try to do my best with it! npm ERR! code EPERM npm ERR! syscall open npm ERR! errno -4048…

水库大坝安全监测预警系统的重要作用

水库大坝建造在地质构造复杂、岩土特性不均匀的地基上&#xff0c;在各种荷载的作用和自然因素的影响下&#xff0c;其工作性态和安全状况随时都在变化。如果出现异常&#xff0c;又不被及时发现&#xff0c;其后果不堪设想。全天候实时监测&#xff0c;实时掌握水库水位、雨情…

使用Tauri开发桌面应用

本文是对视频 Tauri入门教程[1]的学习与记录 Tauri官网[2] 对 node版本有要求 创建项目及目录介绍: 项目的目录结构如下 可以安装推荐的插件 执行npm run tauri build出错,根据 https://github.com/tauri-apps/tauri/issues/7430 执行 yarn add -D tauri-apps/cli && y…

Mistral 7B 比Llama 2更好的开源大模型 (三)

Mistral 7B 比Llama 2更好的开源大模型 Mistral 7B是一个70亿参数的语言模型,旨在获得卓越的性能和效率。Mistral 7B在所有评估的基准测试中都优于最好的开放13B模型(Llama 2),在推理、数学和代码生成方面也优于最好的发布34B模型(Llama 1)。Mistral 7B模型利用分组查询注…

C++初阶--内存管理

文章目录 内存分布new/delete基本用法malloc/free和new/delete的区别进一步理解new和delete的实现原理 定位new&#xff08;了解&#xff09; 内存分布 栈&#xff08;stack&#xff09;&#xff1a;栈是由编译器自动管理的内存区域&#xff0c;用于存储局部变量&#xff0c;函…

Jenkins插件安装失败时这么做就搞定啦

1.网络或墙的问题导致插件下载安装失败 这种错误提示很明显&#xff0c;就是无法连接到插件下载地址&#xff0c;导致插件下载失败。 解决方法 为Jenkins更换源 点击Jenkins主页面左侧列表中【系统管理】—— 下拉找到【管理插件】 选择【高级】选项卡 替换最下方【升级站点…

《变形监测与数据处理》笔记/期末复习资料(择期补充更新)

变形&#xff1a; 变形是物体在外来因素作用下产生的形状、大小及位置的变化&#xff08;随时间域和空间域的变化&#xff09;&#xff0c;它是自然界普遍存在的现象。 变形体&#xff1a; 一般包括工程建筑物、构筑物、大型机械设备以及其他自然和人工对象等。 变形体和变形…

计算机视觉+深度学习+机器学习+opencv+目标检测跟踪+一站式学习(代码+视频+PPT)

第1章&#xff1a;视觉项目资料介绍与学习指南 相关知识&#xff1a; 介绍计算机视觉、OpenCV库&#xff0c;以及课程的整体结构。学习概要&#xff1a; 了解课程的目标和学习路径&#xff0c;为后续章节做好准备。重要性&#xff1a; 提供学生对整个课程的整体认识&#xff0…

订水商城实战教程10-宫格导航

上一篇我们介绍了跑马灯的功能&#xff0c;这一篇就进入到我们的主体部分开发。在订水商城业务中可以按照分类查询商品信息&#xff0c;这就涉及到数据源的拆分。 我们在数据源的设计中区分为主子表&#xff0c;主表呢存储唯一的记录&#xff0c;子表的记录可以重复&#xff0…

Servlet---从创建项目到部署项目的整个流程

文章目录 创建项目引入Servlet依赖创建目录结构编写代码打包程序部署程序验证程序 创建项目 引入Servlet依赖 为什么需要引入依赖资源呢&#xff1f; Servlet不是标准库自带的&#xff0c;需要从外部引入进来才能使用。如何引入&#xff1f; 利用maven&#xff0c;maven的一个…

锐捷软件开机自启动

http://t.csdnimg.cn/h6k9R win键搜索任务计划程序 打开&#xff0c;在windows创建任务&#xff1a;

干货分享!各大跨境电商平台入驻指南及跨境电商实用工具推荐!

当跨境电商成为一个所有人都耳熟能详的名词&#xff0c;各类跨境电商平台和软件都一拥而上&#xff0c;跨境电商平台和工具千千万&#xff0c;那么很多人就在问了&#xff0c;该怎么入驻这些电商平台呢&#xff1f;又该选择什么样的跨境电商软件呢&#xff1f;今天这期干货分享…