07- OpenCV:模糊图像

目录

一、模糊原理

二、模糊的相关处理方法:

1、均值滤波(归一化盒子滤波)

2、高斯滤波(正态分布的形状)

3、中值模糊

4、双边模糊算法(美容软件)

5、相关代码:

6、几种模糊算法的比较:


一、模糊原理

(1)Smooth/Blur 是图像处理中最简单和常用的操作之一

(2)使用该操作的原因之一就为了给图像预处理时候减低噪声(消除数字噪声)

指图像中不该出现的外来像素,通常由电子干扰产生。看起来就像图像被弄脏了,布满一些细小的糙点。

(3)使用Smooth/Blur操作其背后是数学的卷积计算

(4)通常这些卷积算子计算都是线性操作,所以又叫线性滤波

假设有6x6的图像像素点矩阵。(均值滤波的过程)

卷积过程:6x6上面是个3x3的窗口,从左向右,从上向下移动,黄色的每个像个像素点值之和取平均值赋给中心红色像素作为它卷积处理之后新的像素值。每次移动一个像素格。

二、模糊的相关处理方法:

1、均值滤波(归一化盒子滤波)

(1)公式:卷积和系数都是1

对应的图形大概是:没有高的也没有低的

(2)相关API:

 blur(Mat src, Mat dst, Size(xradius, yradius), Point(-1,-1));

Filter2D也可以做模糊,自己定义一个kenel赋值进去。

(3)一般模糊用3*3模糊就行,主要控制x、y的值,要是x方向的模糊多一些,就加大数值,好像一个鬼影一样。

2、高斯滤波(正态分布的形状)

(1)公式:权重不一样

对应的图形大概是:

(2)相关API:

- GaussianBlur(Mat src, Mat dst, Size(11, 11), sigmax, sigmay);

其中Size(x, y), x, y 必须是正数而且是奇数

(3)效果:

看着高斯模糊比均值还要清晰一些。

高斯基于权重模糊,均值滤波基于均值模糊;

3、中值模糊

(1)中值滤波:统计排序滤器

(2)中值滤波对椒盐噪声有很好的抑制作用

(3)相关API:

medianBlur(Mat src, Mat dest, ksize)

备注:中值模糊的ksize大小必须是大于1而且必须是奇数。

(4)功效:比如一张图片有点点,人脸有斑点,就可以很好去掉这些斑点。(椒盐噪声)

4、双边模糊算法(美容软件)

(1)基于高斯双边模糊;

(2)相关API:

bilateralFilter(src, dest, d=15, 150, 3);

备注:

 1)15 –计算的半径,半径之内的像数都会被纳入计算,如果提供-1 则根据sigma space参数取值

 2)150 – sigma color 决定多少差值之内的像素会被计算

 3)3 – sigma space 如果d的值大于0则声明无效,否则根据它来计算d值

(3)功效:

双边模糊:边缘信息更多保留,轮廓更加明显,相当于加了滤镜、磨皮;

高斯模糊:整个图片都模糊了;

与filter2D比较,效果更加好,有美颜的效果;

5、相关代码:

(1)均值滤波、高斯模糊的接口例子

#include <opencv2/opencv.hpp> 
#include <iostream> 
using namespace cv;int main(int argc, char** argv) {Mat src, dst;src = imread("D:/vcprojects/images/test.png");if (!src.data) {printf("could not load image...\n");return -1;}char input_title[] = "input image";char output_title[] = "blur image";namedWindow(input_title, CV_WINDOW_AUTOSIZE);namedWindow(output_title, CV_WINDOW_AUTOSIZE);imshow(input_title, src);blur(src, dst, Size(11, 11), Point(-1, -1));imshow(output_title, dst);Mat gblur;GaussianBlur(src, gblur, Size(11, 11), 11, 11);imshow("gaussian blur", gblur);waitKey(0);return 0;
}

(2)中值滤波、双边模糊、高斯模糊、filter2D几个接口的应用。

#include <opencv2/opencv.hpp> 
#include <iostream> 
using namespace cv;int main(int argc, char** argv) {Mat src, dst;src = imread("D:/vcprojects/images/cvtest.png");if (!src.data) {printf("could not load image...\n");return -1;}namedWindow("input image", CV_WINDOW_AUTOSIZE);imshow("input image", src);//medianBlur(src, dst, 3);bilateralFilter(src, dst, 15, 100, 5);namedWindow("BiBlur Filter Result", CV_WINDOW_AUTOSIZE);imshow("BiBlur Filter Result", dst);Mat resultImg;Mat kernel = (Mat_<int>(3, 3) << 0, -1, 0, -1, 5, -1, 0, -1, 0);filter2D(dst, resultImg, -1, kernel, Point(-1, -1), 0);imshow("Final Result", resultImg);waitKey(0);return 0;}
6、几种模糊算法的比较:

(1)均值模糊无法克服边缘像素信息丢失缺陷。原因是均值滤波是基于平均权重

(2)高斯模糊部分克服了该缺陷,但是无法完全避免,因为没有考虑像素值的不同

(3)高斯双边模糊 – 是边缘保留的滤波方法,避免了边缘信息丢失,保留了图像轮廓不变(美颜相机的算法)

这个图讲解:输入一个图,输出一个图,中间的是卷积核,分为:空域核和值域核;

                空域核指的是:在空间来说,3*3、5*5都有自己的权重;

                值域核:指像素集来说,对于像素集在一定的范围内,就模糊输出,2个图的差异,边缘还在保留的。

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

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

相关文章

问CHATawsec2怎么部署实例?

CHAT回复&#xff1a;在AWS EC2&#xff08;Elastic Compute Cloud&#xff09;上部署实例主要涉及以下步骤&#xff1a; 1. 登录AWS管理控制台&#xff1a;使用你的AWS账户登录AWS管理控制台。 2. 导航到EC2服务&#xff1a;在顶部菜单栏中&#xff0c;点击"服务"然…

本地静态资源打包出来,本地配置ng访问服务器(uniapp打包成h5后,使用打包资源连接测试环境测试)

1.下载ng https://nginx.org/en/download.html 2.解压下载的压缩包 3.打包h5静态资源 4.将打包出来的资源放入ng -》html文件夹下面 5.进入ng-》conf-》nginx.conf 进行转发配置 6.启动ng服务&#xff0c;点击nginx.exe 7.浏览器直接访问http://localhost:8081/#/&#x…

Elasticsearch倒排索引详解

倒排索引&#xff1a; 组成 term index(词项索引 &#xff0c;存放前后缀指针) Term Dictionary&#xff08;词项字典&#xff0c;所有词项经过文档与处理后按照字典顺序组成的一个字典&#xff08;相关度&#xff09;&#xff09; Posting List&#xff08;倒排表&#xf…

Web实战丨基于Django与HTML的新闻发布系统

文章目录 写在前面项目简介项目框架实验内容安装依赖库1.创建项目2.系统配置3.配置视图文件4.配置模型文件5.配置管理员文件6.配置模板文件7.创建数据库8.启动项目 运行结果写在后面 写在前面 本期内容&#xff1a;基于Django与HTML的简单新闻发布系统。 项目需求&#xff1a…

快速入门Semantic Kernel:构建您的第一个AI应用

快速入门Semantic Kernel&#xff1a;构建您的第一个AI应用 引言Semantic Kernel基础知识核心功能操作原理 环境准备和安装环境准备安装Semantic Kernel 创建第一个Semantic Kernel项目项目设置示例代码测试和运行 设计有效的Prompt基本原则示例测试和迭代 常见问题和解决方案问…

order by 与 分页 的冲突

order by 与 分页 的冲突 问题背景 Oracle拼接SQL&#xff0c;JAVA使用SQLQueryExecutor执行拼接的SQL&#xff0c;SQL如下&#xff1a; SELECT col_key, col_other_info FROM tb_tableName WHERE col_where_info 一些筛选条件 order by col_updatetime desc 该表中的数…

python股票分析挖掘预测技术指标知识跳空缺口指标详解(5)

本人股市多年的老韭菜&#xff0c;各种股票分析书籍&#xff0c;技术指标书籍阅历无数&#xff0c;萌发想法&#xff0c;何不自己开发个股票预测分析软件&#xff0c;选择python因为够强大&#xff0c;它提供了很多高效便捷的数据分析工具包。 我们已经初步的接触与学习其中数…

cad的模型怎么打散导入3d---模大狮模型网

将CAD中的模型打散并导入3D建模软件&#xff0c;需要以下步骤&#xff1a; 将CAD中的模型进行分组或分层&#xff1a;在CAD中&#xff0c;将模型按照不同的组或层进行分组或分层。这样可以方便地控制每个部分的显示和隐藏&#xff0c;在导入3D建模软件后&#xff0c;也可以更方…

ChatGLM3-6B的本地api调用

ChatGLM3-6B的本地api调用方式 1.运行openai_api_demo路径下的openai_api.py 启动后界面&#xff1a; 注意&#xff1a;本地api调到的前提是——本地部署了ChatGLM3-6B,本地部署的教程可参考&#xff1a; 20分钟部署ChatGLM3-6B 部署了若CUDA可用&#xff0c;默认会以CUDA方…

阿里云OSS上传视频,可分片上传

uniappH5实现 阿里云OSS上传视频 示例图&#xff1a; 上传视频完整示例代码&#xff1a; 使用npm安装SDK开发包&#xff0c;安装命令为 npm install ali-oss --save accessKeyId 和 accessKeySecret 还有 bucket 替换成你的就行。 multipartUpload 的第一个入参是&#x…

【分享贴】大话ESD和浪涌

从事电子产品开发的朋友应该都知道&#xff0c;电子产品样机完成之后&#xff0c;会进入产品性能测试阶段&#xff0c;而其中的EMC&#xff08;电磁兼容&#xff09;测试则是至关重要的一项。 EMC&#xff08;电磁兼容&#xff09;又被分为两大类&#xff1a;EMI&#xff08;电…

果然程序员的世界不是 0 就是 1

在一场轰动全球的爱情故事中&#xff0c;OpenAI 的首席执行官、同时也是打破常规的浪漫英雄&#xff0c;奥特曼&#xff0c;与他的基友奥利弗穆尔赫林在夏威夷举行了一场迷人的婚礼。在奥特曼的岛屿别墅附近&#xff0c;这对低调却又令人羡慕的新人&#xff0c;在奥特曼的哥哥杰…

webpack执行流程知识点总结

webpack的运行流程 Webpack 的运行流程是一个串行的过程&#xff0c;从启动到结束会依次执行以下流程&#xff1a; 在以上过程中&#xff0c;Webpack 会在特定的时间点广播出特定的事件&#xff0c;插件在监听到感兴趣的事件后会执行特定的逻辑&#xff0c;并且插件可以调用 We…

JAVA毕业设计120—基于Java+Springboot+vue+uniapp的智能小程序商城管理系统(源代码+数据库+15000字论文)

毕设所有选题&#xff1a; https://blog.csdn.net/2303_76227485/article/details/131104075 基于JavaSpringbootvueuniapp的智能小程序商城管理系统(源代码数据库15000字论文)120 一、系统介绍 本项目前后端分离&#xff0c;分为用户、商家、管理员三种角色 1、用户&#…

redis stream restTemplate消息监听队列框架搭建

整体思路 1. pom增加redis依赖&#xff1b; 2. 消息监听器&#xff0c;实现StreamListener接口&#xff0c;处理消息到达逻辑&#xff1b; 3. 将消息订阅bean及监听器注册到配置中&#xff1b; 1. pom <?xml version"1.0" encoding"UTF-8"?> <…

Modern C++ std::mutex底层原理

前言 我时常有这样的疑问&#xff1a; std::mutex怎么就能保证后面的语句100%安全哪&#xff1f;CPU reordering就不会把这些语句重排到mutex前面执行&#xff1f;而且各个CPU都是有L1、L2缓存的&#xff0c;如果mutex后面要访问的的变量在这些缓存中怎么办&#xff1f; 带着…

C++ 类 对象

C 在 C 语言的基础上增加了面向对象编程&#xff0c;C 支持面向对象程序设计。类是 C 的核心特性&#xff0c;通常被称为用户定义的类型。 类用于指定对象的形式&#xff0c;是一种用户自定义的数据类型&#xff0c;它是一种封装了数据和函数的组合。类中的数据称为成员变量&a…

在 WinForms 应用中使用 FtpWebRequest 进行文件操作和数据显示

在 WinForms 应用中使用 FtpWebRequest 进行文件操作和数据显示 引言 在企业级应用或桌面程序中&#xff0c;经常需要从远程服务器获取数据&#xff0c;并在用户界面上展示这些数据。本文将通过一个实际案例&#xff0c;演示如何在 Windows Forms 应用程序中使用 FtpWebReques…

互联网大厂职场各职级P6/P7和核心能力

目录 具体能力要求总结 具体能力要求 专业工匠 p5 被别人带领p6 独立完成项目全流程&#xff0c;指导 2-3 人 乐队指挥 p7 带行政团队 7-10 &#xff0c;项目团队&#xff0c;专项团队&#xff0c;复杂系统设计 1-3 个一般系统构成p8 领域专家 垂直 3 个团队 &#xff0c;横…

Qt/C++音视频开发63-设置视频旋转角度/支持0-90-180-270度旋转/自定义旋转角度

一、前言 设置旋转角度,相对来说是一个比较小众的需求,如果视频本身带了旋转角度,则解码播放的时候本身就会旋转到对应的角度显示,比如手机上拍摄的视频一般是旋转了90度的,如果该视频文件放到电脑上打开,一些早期的播放器可能播放的时候是躺着的,因为早期播放器设计的…