C++:filter2D函数简要概述

OpenCV中的filter2D函数是一个非常强大的工具,用于对图像进行卷积操作,从而应用各种线性滤波器。这个函数能够处理图像中的每个像素,通过将其与指定的卷积核(或称为滤波器)进行卷积运算,来修改图像的特性。以下是关于filter2D函数的详细介绍:

函数原型

在OpenCV中,filter2D函数的原型如下:

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:输出图像,与输入图像src具有相同的大小和通道数。
  • ddepth:输出图像的所需深度(数据类型)。当其为-1时,表示输出图像与输入图像具有相同的深度。
  • kernel:卷积核(或称为滤波器),它是一个单通道的浮点矩阵。这个矩阵定义了如何对输入图像进行卷积操作。
  • anchor:内核的锚点,它指示内核中过滤点的相对位置。锚点应该位于内核内;默认值(-1,-1)表示锚点位于内核中心。
  • delta:一个可选值,它将在将过滤像素存储到dst之前添加到过滤像素上。
  • borderType:像素外推方法,用于处理图像边界外的像素。它决定了当卷积核超出图像边界时,如何处理这些边界像素。常见的选项包括BORDER_CONSTANTBORDER_REPLICATEBORDER_REFLECT等。

工作原理

filter2D函数实际上执行的是卷积运算(尽管在技术上,它计算的是相关性而不是严格的卷积,因为不涉及翻转卷积核)。卷积运算涉及将卷积核“滑过”输入图像,并对每个与卷积核大小相同的子矩阵的对应元素进行乘法运算,然后将结果相加。这个过程会生成一个新的像素值,该值被放置在输出图像的相应位置上。当卷积核滑过整个输入图像时,这个过程会重复进行,直到生成完整的输出图像。

应用场景

通过改变卷积核,filter2D函数可以实现多种图像处理效果,包括但不限于:

  • 图像锐化:使用特定的锐化卷积核可以使图像的边缘更加清晰。
  • 均值滤波:使用平均卷积核可以减少图像噪声,但可能会使图像变得模糊。
  • 高斯滤波:高斯滤波是一种常用的图像平滑技术,它可以减少图像噪声同时保持边缘信息。虽然filter2D函数本身不直接提供高斯核的生成,但可以通过getGaussianKernel函数生成高斯核,并使用filter2D进行高斯滤波。
  • 边缘检测:通过设计特定的卷积核(如Sobel算子、Laplacian算子等),可以检测图像中的边缘。

示例代码

以下是一个使用filter2D函数进行均值滤波的示例代码(Python版):

#include <opencv2/opencv.hpp>  
#include <iostream>  using namespace cv;  
using namespace std;  int main() {  // 加载图像  Mat img = imread("path_to_your_image.jpg");  if (img.empty()) {  cout << "Could not open or find the image!" << endl;  return -1;  }  // 创建一个5x5的平均滤波器核  // 注意:OpenCV中的filter2D函数期望的是float类型的核,并且会自动除以核的元素总数来归一化  Mat kernel = Mat::ones(5, 5, CV_32F) / 25.0;  // 使用filter2D函数进行均值滤波  Mat dst;  filter2D(img, dst, -1, kernel);  // 显示原始图像和滤波后的图像  imshow("Original Image", img);  imshow("Averaging Filtered Image", dst);  // 等待按键事件  waitKey(0);  // 销毁所有OpenCV创建的窗口  destroyAllWindows();  return 0;  
}

在这个示例中,我们创建了一个5x5的平均滤波器核,并使用filter2D函数将其应用于输入图像。结果是一个经过平均滤波处理的图像,其噪声水平有所降低。

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

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

相关文章

ExcelVBA运用Excel的【条件格式】(三)

ExcelVBA运用Excel的【条件格式】&#xff08;三&#xff09;前面知识点回顾1. 访问 FormatConditions 集合 Range.FormatConditions2. 添加条件格式 FormatConditions.Add 方法语法表达式。添加 (类型、 运算符、 Expression1、 Expression2)其中 TextOperator:***&am…

“创新电商营销:‘精选返现‘模式引领购物新风尚“

在电子商务领域的蓬勃发展中&#xff0c;创新营销模式层出不穷&#xff0c;其中“精选返现”模式凭借其创新的互动机制与激励机制&#xff0c;赢得了广大消费者的青睐。该模式通过优化价格策略、融入社交互动及构建梯度回馈体系&#xff0c;有效激发了消费者的购买动力&#xf…

企业应对策略:全面防御.DevicData-P-xxxxxx勒索病毒

引言 在数字化时代&#xff0c;网络安全已成为不可忽视的重要议题。随着互联网的普及&#xff0c;各种网络威胁层出不穷&#xff0c;其中勒索病毒以其独特的攻击方式和巨大的破坏性&#xff0c;给个人用户和企业带来了严重的经济损失和数据安全风险。在众多勒索病毒中&#xff…

IOSG 创始人:东方加密社区不能永远是 Meme,我们需要一场燎原之火

撰文&#xff1a;Jocy&#xff0c;IOSG Ventures 创始人 本文来源香港Web3媒体&#xff1a;Techub News 最近刚好看到天行健的故事&#xff0c;百日维新变法历历在目&#xff0c;难以想象在清朝那样的朝代还有一些年轻人愿意冒着被杀头的风险追随光绪皇帝&#xff0c;在王朝内…

昇思25天学习打卡营第11天|基于MindSpore的GPT2文本摘要

数据集 准备nlpcc2017摘要数据&#xff0c;内容为新闻正文及其摘要&#xff0c;总计50000个样本。 数据需要预处理&#xff0c;如下 原始数据格式&#xff1a; article: [CLS] article_context [SEP] summary: [CLS] summary_context [SEP] 预处理后的数据格式&#xff1a; […

docker部署ES遇到的问题

在使用docker部署ES 集群时遇到了一些问题&#xff0c;自己记录一下 集群启动成功后有一个节点加入不了集群 failed to validate incoming join request from node Caused by: org.elasticsearch.cluster.coordination.CoordinationStateRejectedException: This node previo…

Java socket 获取gps定位

1.Java socket 获取gps定位的方法 在Java中使用Socket来直接获取GPS定位信息并不直接可行&#xff0c;因为GPS数据通常不是通过Socket通信来获取的。GPS数据通常由设备&#xff08;如智能手机、GPS接收器&#xff09;上的GPS硬件模块生成&#xff0c;并通过操作系统或专门的GP…

Redis安装部署与使用,多实例

一、redis基础 1.1 关系型数据库和NoSQL数据库 数据库主要分为两大类&#xff1a;关系型数据库与 NoSQL 数据库。 关系型数据库&#xff0c;是建立在关系模型基础上的数据库&#xff0c;其借助于集合代数等数学概念和方法来处理数据库中的数据。主流的 MySQL、Oracle、MS SQ…

Python爬虫教程第2篇-reqeusts是最好用的网络请求工具

简介 爬虫第一步就是网络请求&#xff0c;一个好用的网络请求库会非常重要。而requests库就是非常好用的一个http库&#xff0c;pyhon中虽然也有内置的urllib库用于网络请求&#xff0c;但是urllib使用起来比较的麻烦&#xff0c;而且缺少很多实用的高级功能&#xff0c;所以这…

Syncthing一款开源去中心化和点对点文件同步工具

Syncthing&#xff1a;一款开源的文件同步工具&#xff0c;去中心化和点对点加密传输&#xff0c;支持多平台&#xff0c;允许用户在多个设备之间安全、灵活地同步和共享文件&#xff0c;无需依赖第三方云服务&#xff0c;特别适合高安全性和自主控制的文件同步场景。 &#x…

牛客周赛 Round 50

A题&#xff1a;小红的最小最大 思路&#xff1a; 大水题 code&#xff1a; inline void solve() {int a, b, c; cin >> a >> b >> c;if (min(a, b) c > max(a, b)) cout << "YES\n";else cout << "NO\n";return; }…

传感器标定(二)摄像头外参标定(camera2lidar)

一、数据采集 1、ros包数据采集 rosbag record -a -O output_filename --duration6 //设置bag包名字为 my_rosbag.bag rosbag record -a -O my_rosbag.bag --duration62、参数解释 -a&#xff1a;订阅所有话题。-O output_filename&#xff1a;指定输出文件名称。–duration…

使用MySQLInstaller配置MySQL

操作步骤 1.配置High Availability 默认选项Standalone MySQL Server classic MySQL Replication 2.配置Type and Networking ◆端口默认启用TCP/P网络 ◆端口默认为3306 3.配置Account and Roles 设置root账户的密码、添加其他管理员 4.配置Windows Service ◆配置MySQL Serv…

Java线程池及面试题

1.线程池介绍 顾名思义&#xff0c;线程池就是管理一系列线程的资源池&#xff0c;其提供了一种限制和管理线程资源的方式。每个线程池还维护一些基本统计信息&#xff0c;例如已完成任务的数量。 总结一下使用线程池的好处&#xff1a; 降低资源消耗。通过重复利用已创建的…

xcode项目添加README.md文件并进行编辑

想要给xcode项目添加README.md文件其实还是比较简单的&#xff0c;但是对于不熟悉xcode这个工具的人来讲&#xff0c;还是有些陌生&#xff0c;下面简单给大家讲一下流程。 选择“文件”>“新建”>“文件”&#xff0c;在其他&#xff08;滚动到工作表底部&#xff09;下…

【云原生】AWS云平台,ECR推送Helm chart包

文章目录 1、背景信息2、AWS ECR推送OCI1、背景信息 背景一:OCI 是一个围绕容器格式和运行时的开放治理结构,旨在创建开放的行业标准。OCI 由 Docker、CoreOS 和其他容器技术相关的公司于 2015 年创立,现在由 Linux 基金会托管。OCI 的目标是提供一个中立的论坛,以解决容器…

Vue 3<script setup>使用v-for渲染数组中的元素,根据传入id删除数组元素(filter方法根据元素id过滤数组中的元素)

首先&#xff0c;需要在<script setup>中定义组件的数据和方法。然后&#xff0c;在模板中使用v-for来遍历数组并渲染元素&#xff0c;每个元素旁边添加一个删除按钮&#xff0c;并通过点击事件调用删除方法。 <template> <div> <div v-for"item …

Java基础-组件及事件处理(中)

(创作不易&#xff0c;感谢有你&#xff0c;你的支持&#xff0c;就是我前行的最大动力&#xff0c;如果看完对你有帮助&#xff0c;请留下您的足迹&#xff09; 目录 BorderLayout布局管理器 说明&#xff1a; 示例&#xff1a; FlowLayout布局管理器 说明&#xff1a; …

vue extend的作用和使用方法

Vue.extend 是 Vue.js 提供的一个全局 API&#xff0c;用于扩展 Vue 组件。它的作用是创建一个可以被多次使用的组件构造器&#xff0c;可以像普通组件一样使用&#xff0c;并且可以在多个地方可以实例化该组件。 Vue.extend 的原理是通过 Vue.extend 方法创建一个新的构造器&…

【Qt5】入门Qt开发教程,一篇文章就够了(详解含qt源码)

目录 一、Qt概述 1.1 什么是Qt 1.2 Qt的发展史 1.3 Qt的优势 1.4 Qt版本 1.5 成功案例 二、创建Qt项目 2.1 使用向导创建 2.2 一个最简单的Qt应用程序 2.2.1 main函数中 2.2.2 类头文件 2.3 .pro文件 2.4 命名规范 2.5 QtCreator常用快捷键 三、Qt按钮小程序 …