OpenCV()

news/2024/9/18 9:59:47/文章来源:https://www.cnblogs.com/keye/p/18413195

目录
  • 1. 函数定义
  • 2. 工作原理
  • 3. 示例
  • 4. 效果说明
  • 5. 应用场景



cv::blur() 是 OpenCV 提供的一个用于图像模糊处理的函数,它通过卷积运算对图像进行均值滤波。这个函数对于消除噪声、平滑图像非常有效,尤其是在边缘检测等操作之前常用。

1. 函数定义

void cv::blur(InputArray src,   // 输入图像OutputArray dst,  // 输出图像Size ksize,       // 滤波器的核大小Point anchor = Point(-1, -1),  // 锚点,默认为核中心int borderType = BORDER_DEFAULT  // 边界插值方法
);

参数:

  1. src (输入图像):

    • 输入图像可以是 1 通道(灰度图)或 3 通道(彩色图)。
    • 类型可以是 8 位、16 位或 32 位浮点类型。
  2. dst (输出图像):

    • 与输入图像具有相同的大小和类型,存储模糊后的图像。
  3. ksize (核大小):

    • Size(kwidth, kheight) 是滤波器的宽度和高度,决定了卷积核的大小,必须是正数。核的大小越大,图像的模糊程度越明显。
    • 常见的值为 (3, 3),即 3x3 的均值滤波器,这会对周围 8 个像素以及中心像素进行平均计算。
  4. anchor (锚点):

    • 锚点是指滤波器的中心点在图像中的位置,默认值为 Point(-1, -1),表示使用滤波器的中心点作为锚点。可以自定义锚点来控制滤波的方式,但一般情况下使用默认值。
  5. borderType (边界类型):

    • 定义当卷积核接触到图像边缘时如何处理边界外的像素。常见的值包括:
      • BORDER_CONSTANT: 填充固定常量值。
      • BORDER_REPLICATE: 重复边缘像素。
      • BORDER_REFLECT: 镜像反射边界。
      • BORDER_WRAP: 用对面图像边缘的像素填充。
      • BORDER_DEFAULT 是 OpenCV 默认值,通常为 BORDER_REFLECT_101


2. 工作原理

cv::blur() 使用均值滤波器(mean filter)对图像进行平滑处理。其基本原理是通过一个核窗口(由 ksize 定义)在图像上滑动,对核窗口内的像素求平均值,并将该值赋给输出图像中对应位置的像素。公式如下:

\[dst(x, y) = \frac{1}{kwidth \times kheight} \sum_{i=0}^{kwidth-1} \sum_{j=0}^{kheight-1} src(x+i, y+j) \]

  • src(x+i, y+j) 是原图像在核窗口中的像素值。
  • dst(x, y) 是输出图像中的模糊像素值。


3. 示例

#include <opencv2/opencv.hpp>int main() {// 读取输入图像cv::Mat src = cv::imread("input.jpg");// 输出图像cv::Mat dst;// 使用3x3均值滤波器模糊处理cv::blur(src, dst, cv::Size(3, 3));// 显示原始图像和模糊图像cv::imshow("Original Image", src);cv::imshow("Blurred Image", dst);cv::waitKey(0);return 0;
}


4. 效果说明

  • 小的核大小(例如 3x3)会导致轻微模糊,适合去除细微噪声。
  • 较大的核大小(例如 15x15)会导致明显模糊,使得图像变得平滑,但也会失去很多细节。


5. 应用场景

  1. 去除图像噪声: 在对图像进行边缘检测之前,通过均值滤波可以减少噪声的干扰,使得边缘检测效果更加精确。
  2. 图像平滑: 在图像处理中,模糊操作有时用于简化图像的细节,从而突出更大的结构。
  3. 去除过多的细节: 某些情况下,图像的过多细节会影响后续处理,使用均值滤波可以有效降低这种影响。

cv::blur() 是一种简单的线性滤波器,适用于基本的图像平滑和降噪任务。在更高级的图像处理需求中,可能会使用其他滤波器如高斯模糊(cv::GaussianBlur())或者中值滤波(cv::medianBlur())。



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

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

相关文章

解决Spring Data JPA Hibernate的N+1问题的最佳方法

最佳方法:定制@NamedEntityGraph、定制查询和定制VO,可以做到按照需要最佳查询,需要注意的地方:定制VO的字段一定要等于或小于实际查询的字段,才不会复制的时候触发N+1查询。 1 问题复现 1.1 项目结构 1.2 entitypackage com.xkzhangsan.jpa.entity;import lombok.Getter;…

全网最适合入门的面向对象编程教程:48 Python函数方法与接口-位置参数、默认参数、可变参数和关键字参数

在 Python 中,函数可以接受多种不同类型的参数,包括位置参数、默认参数、可变参数和关键字参数等,理解这些参数类型对于编写灵活且可维护的代码非常重要。全网最适合入门的面向对象编程教程:48 Python 函数方法与接口-位置参数、默认参数、可变参数和关键字参数摘要: 在 P…

软工作业-个人介绍

一、自我介绍 我是广东工业大学大三的学生,我的爱好是打游戏 二、快速阅读软件工程教材之后的问题 软件工程中的需求分析如何做到全面而准确? 软件设计的原则有哪些,如何在实际项目中灵活运用? 软件测试的方法有哪些,如何确保测试的有效性? 项目管理在软件工程中的重要性…

浙江理工大学24软件技术基础第一次作业

这个作业属于哪个课程 https://edu.cnblogs.com/campus/zjlg/rjjc/这个作业的目标 介绍自己并发表对课程学习的期望姓名-学号 李想-2021330301036浙江理工大学24软件技术基础第一次作业 一、自我介绍 (一)、基本信息 大家好!我是22级自动化2班的李想,来自广东。我的爱好是动…

海贼女帝3D打印模型免费分享

链接:https://pan.quark.cn/s/fbe6cb7fd476

碧蓝航线-山城-猫娘3D打印模型免费分享

下载链接:https://pan.quark.cn/s/4c64df8eb54e

地牢里发生了什么3D模型免费分享

下载链接:https://pan.quark.cn/s/0c01c6fd4e90

斩赤红之瞳-艾斯德斯3D打印模型免费分享

链接:https://pan.quark.cn/s/c26ae6a17b69

18号3D打印模型分享

下载地址:https://pan.quark.cn/s/5c735ceee560

Redis 入门 - 收官

《Redis入门》系列完成,涵盖Redis基本信息、安装、可视化工具、基础数据类型、C#/.NETCore客户端库及封装。分享学习经验,帮助初学者少走弯路,形成系统性概念。后续将分享《Redis进阶》。《Redis 入门》系列文章总算完成了,希望这个系列文章可以想入门或刚入门的同学提供帮…

计算机桌面有去不掉的窗口边框 ,电脑屏幕有残留刷新去不掉怎么办

先允许任务管理器 ,结束explorer进程树 还可以参考 https://blog.csdn.net/weixin_42614269/article/details/118206476再重新运行explorer任务 桌面恢复正常。

对HTML基础详细拓展

1.什么是HMTL? HTML 是用来描述网页的一种语言。 HTML 指的是超文本标记语言: HyperText Markup Language HTML 不是一种编程语言,而是一种标记语言 标记语言是一套标记标签 (markup tag) HTML 使用标记标签来描述网页 HTML 文档包含了HTML 标签及文本内容 HTML文档也叫做 we…