OpenCV图像滤波(5)二维卷积滤波函数filter2D()的使用

news2025/1/9 1:25:06
  • 操作系统:ubuntu22.04
  • OpenCV版本:OpenCV4.9
  • IDE:Visual Studio Code
  • 编程语言:C++11

算法描述

cv::filter2D() 函数用于对图像应用二维卷积滤波器。这个函数可以用来实现多种图像处理操作,如模糊、锐化、边缘检测等。它通过将一个二维核(也称为滤波器或掩模)与图像中的每个像素进行卷积来工作。

函数与核进行卷积操作。
此函数将任意线性滤波器应用于图像。支持原地操作。当核的部分超出图像范围时,函数会根据指定的边界模式插值处理边界外的像素值。
此函数实际上计算的是相关运算,而非卷积:
dst ( x , y ) = ∑ 0 ≤ x ′ < kernel.cols 0 ≤ y ′ < kernel.rows kernel ( x ′ , y ′ ) ∗ src ( x + x ′ − anchor.x , y + y ′ − anchor.y ) \texttt{dst} (x,y) = \sum _{ \substack{0\leq x' < \texttt{kernel.cols}\\{0\leq y' < \texttt{kernel.rows}}}} \texttt{kernel} (x',y')* \texttt{src} (x+x'- \texttt{anchor.x} ,y+y'- \texttt{anchor.y} ) dst(x,y)=0x<kernel.cols0y<kernel.rowskernel(x,y)src(x+xanchor.x,y+yanchor.y)

函数原型

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 目标图像期望的深度,参见 combinations
  • 参数kernel卷积核(或更确切地说是相关核),单通道浮点矩阵;如果您想对不同通道应用不同的核,可以使用 split 函数将图像分割成单独的颜色平面并分别处理它们。
  • 参数anchor 核的锚点,指示过滤点在核内的相对位置;锚点应位于核内;默认值 (-1, -1) 表示锚点位于核的中心。
  • 参数delta 可选值,在将过滤后的像素存储到 dst 之前添加到这些像素上。
  • 参数borderType 像素外推方法,参见 BorderTypes。BORDER_WRAP 不受支持。

代码示例

#include <iostream>
#include <opencv2/opencv.hpp>

int main( int argc, char** argv )
{
    // 加载图像
    cv::Mat src = cv::imread( "/media/dingxin/data/study/OpenCV/sources/images/erik.jpg", cv::IMREAD_COLOR );
    if ( !src.data )
    {
        std::cerr << "错误: 无法打开或找到图像。" << std::endl;
        return -1;
    }

    cv::Size sz2Sh( 400, 600 );

    cv::resize( src, src, sz2Sh, 0, 0, cv::INTER_LINEAR_EXACT );

    // 创建输出图像
    cv::Mat dst;

    cv::Mat kernelGaussian = cv::getGaussianKernel( 9, 2.5 );
    cv::Mat kernel         = kernelGaussian * kernelGaussian.t();

    for ( int i = 0; i < 4; i++ )
    {
        filter2D( src, dst, src.depth(), kernel );
    }

    // 显示图像
    cv::namedWindow( "原始图像", cv::WINDOW_NORMAL );
    cv::imshow( "原始图像", src );

    cv::namedWindow( "平滑处理后的图像", cv::WINDOW_NORMAL );
    cv::imshow( "平滑处理后的图像", dst );

    cv::waitKey( 0 );

    return 0;
}

运行结果

在这里插入图片描述

你可以修改getGaussianKernel的参数和filter2D的执行次数,看看图像有什么变化

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

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

相关文章

什么是Docke,部署dockers,和基本操作命令

Docker简介 什么是容器 容器是用来装东西的&#xff0c;Linux 里面的容器是用来装应用的&#xff1b; 容器就是将软件打包成标准化单元&#xff0c;以用于开发、交付和部署&#xff1b; 容器技术已经成为应用程序封装和交付的核心技术&#xff1b; 容器原理&#xff1a;容器…

如何在STEP 7 (TIA Portal)中配置访问共享的设备及模块内部共享输入/输出(MSI/MSO)功能

通过模块内部共享输入/输出&#xff08;MSI/MSO&#xff09;功能&#xff0c;输入或输出模块可以将其输入或输出数据最多提供给4个IO控制器。 这篇文档介绍了如何在STEP 7 (TIA Portal)中配置访问共享的设备及模块内部共享输入/输出功能。可以在两个不同的项目里或同一个项目里…

24.8.3数据结构|双向循环链表、静态链表

双向循环链表 节点类型与双链表的节点类型完全相同双向循环链表的操作也与双链表的操作基本一致。 例题 将自然数一到N按由小到大的顺序沿顺时针方向围成一个圈&#xff0c;然后以一为起点先沿顺时针方向数到第N个数将其划去&#xff0c;再沿逆时针方向数到第K个数将其滑去&a…

密码加密机的功能模块

密码加密机&#xff0c;也称为加密机或硬件加密模块(HSM&#xff0c;Hardware Security Module)&#xff0c;是一种通过国家商用密码主管部门鉴定并批准使用的国内自主开发的主机加密设备。以下是对密码加密机的详细解析&#xff1a; 一、基本概述 定义&#xff1a;密码加密机是…

LabVIEW位移检测系统

工业控制器的位移检测在保证机械设备精确运行中发挥着重要的作用。开发了一种基于LabVIEW的高精度位移检测系统&#xff0c;该系统通过集成硬件与软件的优化配置&#xff0c;实现了对工业控制器位移的精确测量和分析。 项目背景 在传统工业生产中&#xff0c;位移检测系统往往…

macos 10.15系统:macOS Catalina for mac 正式版

macOS Catalina for mac (macos 10.15系统)详细的最新功能介绍&#xff0c;此次macOS Catalina 10.15.7正式版更新发布&#xff0c;本次更新主要为您的Mac提供了重要的安全性更新和错误修复。感兴趣的朋友&#xff0c;欢迎前来下载&#xff01; macOS Catalina 让你喜欢的种种…

JVM知识总结(CMS收集器)

文章收录在网站&#xff1a;http://hardyfish.top/ 文章收录在网站&#xff1a;http://hardyfish.top/ 文章收录在网站&#xff1a;http://hardyfish.top/ 文章收录在网站&#xff1a;http://hardyfish.top/ CMS收集器 CMS&#xff08;Concurrent Mark Sweep&#xff09;收集…

Spring Boot + Vue(4)授权查看信息

前言 在SpringBoot和Vue的组合中&#xff0c;实现一个查看商品详情信息需商品主人授权的功能&#xff0c;涉及到前后端的协作以及权限管理的设计。以下是一个基本的实现步骤和概念介绍&#xff1a; 一. 设计数据库模型 首先&#xff0c;你需要设计数据库模型来存储商品信息、用…

物镜球差透射AC-TEM的原理、步骤与数据分析-测试狗

物镜球差透射AC-TEM的原理、步骤与数据分析 物镜球差透射AC-TEM是一种高级的透射电子显微镜技术&#xff0c;它通过校正物镜球差来提高图像的分辨率和对比度&#xff1b;这种技术在材料科学、生物学、化学等领域的研究中发挥着重要作用。 一、原理 物镜球差透射AC-TEM的原理基…

代码随想录算法训练营第七天(一)| 454.四数相加II 383. 赎金信

454.四数相加II 题目&#xff1a; 给你四个整数数组 nums1、nums2、nums3 和 nums4 &#xff0c;数组长度都是 n &#xff0c;请你计算有多少个元组 (i, j, k, l) 能满足&#xff1a; 0 < i, j, k, l < nnums1[i] nums2[j] nums3[k] nums4[l] 0 示例 1&#xff1…

Debug小妙招·「1」--使用GDB分析进程Core Dump

使用GDB分析进程Core Dump 目录 Core Dump简介GDB简介生成Core Dump使用GDB分析Core Dump实例分析常见问题与解决方法1. Core Dump简介 什么是Core Dump 当程序崩溃(例如,由于非法内存访问或除零操作)时,操作系统会生成一个文件,称为core dump。这个文件包含了程序在崩溃时…

常见VPS服务器附加组件一览

网络主机行业竞争非常激烈&#xff0c;因此主机服务提供商竭尽全力为客户提供完整的解决方案&#xff0c;其中包含构建和管理在线项目所需的一切。但客户通常有特定需求&#xff0c;因此需要不同的附加组件。在管理自己的网络服务器时尤其如此。 今天&#xff0c;我们将介绍您…

无感陶瓷电阻器-EAK脉冲能量吸收电阻

EAK陶瓷电阻器系列投入批量生产。BA 系列的最大电阻为 1MΩ&#xff0c;电压高达 20kV。 在散装结构中表现出色 EAK 的无感陶瓷电阻器设计用于需要高电压、高能量和高峰值电流电阻器的应用。固有的非感性电阻器是通过本体结构产生的&#xff0c;而不是蜿蜒曲折或转弯产生的。这…

Django内置后端和自定义后端

【图书介绍】《Django 5企业级Web应用开发实战&#xff08;视频教学版&#xff09;》_django 5企业级web应用开发实战(视频教学版)-CSDN博客 《Django 5企业级Web应用开发实战&#xff08;视频教学版&#xff09;》(王金柱)【摘要 书评 试读】- 京东图书 (jd.com) 5.2.3 内置…

java学习笔记 day8.6

修改数据 1.修改数据时判断name参数不为空且非空字符串,判断salary是不为空则添加记录 <update id"editStaffItem">update staff<set><if testname!null and name!"">name#{name},</if><if test"salary!null">sa…

LearnOpenGL-光照章节(颜色、基础光照、材质、光照贴图)

LearnOpenGL-光照章节&#xff08;颜色、基础光照、材质、光照贴图&#xff09; 颜色创建一个光照场景 基础光照一、环境光照二、漫反射光照三、镜面反射 材质光照贴图一、漫反射贴图二、镜面光贴图三、放射光贴图 颜色 我们在现实生活中看到某一物体的颜色并不是这个物体真正…

Unity强化工程 之 SpriteShape(精灵地形编辑器)

本文仅作笔记学习和分享&#xff0c;不用做任何商业用途 本文包括但不限于unity官方手册&#xff0c;unity唐老狮等教程知识&#xff0c;如有不足还请斧正 1.什么是SpriteShape&#xff1f; SpriteShape 是一个灵活且功能强大的世界构建资源&#xff0c;它可以沿着形状的轮廓进…

基于springboot+vue+uniapp的“口腔助手”小程序

开发语言&#xff1a;Java框架&#xff1a;springbootuniappJDK版本&#xff1a;JDK1.8服务器&#xff1a;tomcat7数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09;数据库工具&#xff1a;Navicat11开发软件&#xff1a;eclipse/myeclipse/ideaMaven包&#…

秒懂C++之deque及反向迭代器

目录 前言 一.deque的常用接口 二.deque的原理 2.1 vector与list的优缺点 2.2 deque的原理 三.反向迭代器 四.全部代码 前言 秒懂C之List-CSDN博客 秒懂C之vector&#xff08;下&#xff09;-CSDN博客 本文后面关于反向迭代器的操作会涉及到前面的文章~ 一.deque的常用接…

WriterSide 文档、接口自动编译并部署到GitPage

WriterSide 自动编译并部署到GitPage 1. GitHub 创建空仓库2. 配置GitHub 仓库的编译部署方式3. WriteSide 创建项目4. 创建自动、编译部署配置文件5. 自动编译、部署1. GitHub 创建空仓库 在 GitHub 创建一个空的仓库 仓库创建成功后, 记录仓库的远程地址 仓库地址需要修改…