opencv-图像平滑

news2024/9/28 21:18:48

高斯平滑
高斯平滑即采用高斯卷积核对图像矩阵进行卷积操作。高斯卷积核是一个近似服从高斯分布的矩阵,随着距离中心点的距离增加,其值变小。这样进行平滑处理时,图像矩阵中锚点处像素值权重大,边缘处像素值权重小。

import cv2 as cv
import matplotlib.pyplot as plt
import numpy as np
from cv2 import GaussianBlur

img = cv.imread(r"C:\Users\mzd\Desktop\opencv\images.jpg")
img_gauss = cv.GaussianBlur(img,(3,3),1)  #opencv中提供了GaussianBlur()函数来进行高斯平滑
cv.imshow("img",img)  #显示原图
cv.imshow("img_gauss",img_gauss)  #显示高斯平滑图
cv.waitKey(0)  #参数为 0,表示程序会无限期地等待用户按下键盘上的任意键。
cv.destroyAllWindows() #cv.destroyAllWindows() 是 OpenCV 中的一个函数调用,用于关闭所有通过 cv2.imshow() 打开的图像窗口。这个函数没有参数,调用它会关闭当前打开的所有窗口。

GaussianBlur()

代码使用示例和效果如下:(相比于原图,平滑后图片变模糊)
在这里插入图片描述
cv2.GaussianBlur() 是 OpenCV 中用于对图像进行高斯模糊(Gaussian Blur)的函数。高斯模糊是一种常用的图像平滑技术,它可以有效地去除图像中的噪声,使图像变得更加平滑。

该函数的基本语法如下:

cv2.GaussianBlur(src, ksize, sigmaX[, dst[, sigmaY[, borderType]]])

参数说明:

  • src: 输入图像。
  • ksize: 高斯核的大小。通常为正的奇数(如3、5、7…)。高斯核的大小影响了模糊的程度。
  • sigmaX: X 方向上的高斯核标准差。如果设为0,则根据 ksize 计算。
  • dst(可选): 输出图像。
  • sigmaY(可选): Y 方向上的高斯核标准差。如果设为0,则与 sigmaX 相等。
  • borderType(可选): 边界处理的方式,通常为默认值 cv2.BORDER_DEFAULT

均值平滑

import cv2 as cv
import matplotlib.pyplot as plt
import numpy as np

img = cv.imread(r"C:\Users\mzd\Desktop\opencv\images.jpg")
img_blur = cv.blur(img,(3,5)) #均值平滑
# img_blur = cv.boxFilter(img,-1,(3,5))
cv.imshow("img",img)
cv.imshow("img_blur",img_blur)
cv.waitKey(0)#参数为 0,表示程序会无限期地等待用户按下键盘上的任意键
cv.imshow("img",img)
cv.destroyAllWindows()#cv.destroyAllWindows() 是 OpenCV 中的一个函数调用,用于关闭所有通过 cv2.imshow() 打开的图像窗口。这个函数没有参数,调用它会关闭当前打开的所有窗口。

在这里插入图片描述

cv2.blur() 是 OpenCV 中用于对图像进行均值模糊(Blur)的函数。均值模糊是一种简单的平滑技术,它通过取图像局部区域的平均值来模糊图像,从而实现去噪的效果。

该函数的基本语法如下:

cv2.blur(src, ksize[, dst[, anchor[, borderType]]])

参数说明:

  • src: 输入图像。
  • ksize: 决定了模糊程度的核的大小。通常为正的奇数(如3、5、7…)。
  • dst(可选): 输出图像。
  • anchor(可选): 锚点,默认值 (-1, -1) 表示核的中心。
  • borderType(可选): 边界处理的方式,通常为默认值 cv2.BORDER_DEFAULT

中值平滑
中值平滑也有核,但并不进行卷积计算,而是对核中所有像素值排序得到中间值,用该中间值来代替锚点值。opencv中利用medianBlur()来进行中值平滑,中值平滑特别适合用来去除椒盐噪声。

import cv2 as cv
import matplotlib.pyplot as plt
import numpy as np
import random
img = cv.imread(r"C:\Users\mzd\Desktop\opencv\images.jpg")
rows,cols = img.shape[:2]
#加入椒盐噪声
for i in range(100):
    r = random.randint(0,rows-1)
    c = random.randint(0,cols-1)
    img[r,c]=255
img_medianblur = cv.medianBlur(img,5)
cv.imshow("img",img)
cv.imshow("img_medianblur",img_medianblur)
cv.waitKey(0)
cv.destroyAllWindows()

在这里插入图片描述
cv2.medianBlur() 是 OpenCV 中用于对图像进行中值模糊的函数。中值模糊是一种非线性的平滑技术,它将每个像素的值替换为相应邻域中所有像素的中值。这种方法对于去除图像中的椒盐噪声等离群点非常有效。
该函数的基本语法如下:

cv2.medianBlur(src, ksize[, dst])

参数说明:

  • src: 输入图像。
  • ksize: 决定了模糊程度的核的大小。通常为正的奇数(如3、5、7…)。
  • dst(可选): 输出图像。

双边滤波
相比于上面几种平滑算法,双边滤波在平滑的同时还能保持图像中物体的轮廓信息。双边滤波在高斯平滑的基础上引入了灰度值相似性权重因子,所以在构建其卷积核核时,要同时考虑空间距离权重和灰度值相似性权重。在进行卷积时,每个位置的邻域内,根据和锚点的距离d构建距离权重模板,根据和锚点灰度值差异r构建灰度值权重模板,结合两个模板生成该位置的卷积核。

#coding:utf-8

import cv2 as cv
import matplotlib.pyplot as plt
import numpy as np
import random
import math
img = cv.imread(r"C:\Users\mzd\Desktop\opencv\images.jpg")
img_bilateral = cv.bilateralFilter(img,0,0.2,40)
cv.imshow("img",img)
cv.imshow("img_bilateral",img_bilateral)
cv.waitKey(0)
cv.destroyAllWindows()

在这里插入图片描述
cv2.bilateralFilter() 是 OpenCV 中用于进行双边滤波的函数。双边滤波是一种非线性滤波技术,它考虑了像素之间的空间距离和像素值之间的灰度相似性。这使得双边滤波能够在平滑图像的同时保留边缘
该函数的基本语法如下:

cv2.bilateralFilter(src, d, sigmaColor, sigmaSpace[, dst[, borderType]])

参数说明:

  • src: 输入图像。
  • d: 领域直径。如果非正数,会从 sigmaSpace 计算。
  • sigmaColor: 色彩空间的标准差。较大的值表示在颜色空间中考虑更广泛的区域。
  • sigmaSpace: 坐标空间的标准差。较大的值表示在空间中考虑更广泛的区域。
  • dst(可选): 输出图像。
  • borderType(可选): 边界处理的方式,通常为默认值 cv2.BORDER_DEFAULT

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

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

相关文章

C语言入门——第十七课

一、二分查询 1.概念 二分查询又被称为二分查找,是一种在有序数组或序列中快速查找到对应元素的一种方法。每次查找范围缩小至原来的一半。 ①前提条件 数组和列表必须有序,否则无法进行二分查找。 ②初始化 确定查找数组和列表的左边界&#xff0…

js ::after简单实战

::after的作用是在元素后面再加个XXX样式 工作中遇到了一个表格,鼠标指到单元格要有个整行编辑态的效果,下面写个简单的demo 有人可能会说了,直接修改某个单元格的hover样式不就行了嘛,问题是如果鼠标指到单元格和单元格直接的…

自己动手打包构建编译cri-dockerd

1.背景 本机是 armv7l架构cpu,发现官方文档中竟然没有,因此需要自己编译下; [rootcontainer0 ~]# uname -a Linux container0 5.4.206-v7l.1.el7 #1 SMP Mon Jul 25 14:13:29 UTC 2022 armv7l armv7l armv7l GNU/Linux2.打包/构建/编译 gi…

Linux—简介安装常用命令系统中软件安装项目部署

目录 1. 前言1.1 什么是Linux1.2 为什么要学Linux1.3 学完Linux能干什么 2. Linux简介2.1 主流操作系统2.2 Linux发展历史2.3 Linux系统版本 3. Linux安装3.1 安装方式介绍3.2 安装VMware3.3 安装Linux3.4 网卡设置3.5 安装SSH连接工具3.5.1 SSH连接工具介绍3.5.2 FinalShell安…

北醒携全球首款256线车规量产激光雷达亮相广州国际车展

11月17日,北醒携全球首款256线车规量产激光雷达亮相广州国际车展。在车展期间,北醒还公布了与广州花都区人民政府达成投资合作,获滴滴自动驾驶投资以及与捷普联合打造的全球首条量产256线级别车规激光雷达的生产线即将贯通的等多条利好信息&a…

如何提高图片转excel的效果?(软件选择篇)

在日常的工作中,我们常常会遇到一些财务报表类的图片需要转换成可编辑的excel,但是,受各种条件的限制,常常只能通过手工录入这种原始的方式来实现,随着人工智能、深度学习以及网络技术的发展,这种原始的录入…

【C++】泛型编程 ⑩ ( 类模板的运算符重载 - 函数实现 写在类外部的同一个 cpp 代码中 | 类模板 的 外部友元函数二次编译问题 )

文章目录 一、类模板 - 函数声明与函数实现分离1、类模板 外部 实现 构造函数2、类模板 外部 实现 普通函数3、类模板 外部 实现 友元函数( 1 ) 错误示例及分析 - 类模板 的 外部友元函数 二次编译 问题( 2 ) 正确写法 二、代码示例 - 函数声明与函数实现分离1、代码示例2、执行…

深度学习之基于Pytorch的昆虫分类识别系统

欢迎大家点赞、收藏、关注、评论啦 ,由于篇幅有限,只展示了部分核心代码。 文章目录 一项目简介系统架构技术亮点 二、功能三、系统四. 总结 一项目简介 # 深度学习基于 Pytorch 的昆虫分类识别系统介绍 深度学习在图像分类领域取得了显著的成就&#…

logic-flow 使用过程中遇到的bug - 拖动节点到画布的时候,鼠标松开,节点不落在画布,仍旧跟着鼠标走

背景: 插件:logicFlow 用途:画流程图 bug表现: 初始化的样子: bug的样子: 拖动第一个节点的时候,一切正常(无论哪个节点作为第一个节点,都是正常的,但是拖动…

C语言回文数(1106:回文数(函数专题))

题目描述 一个正整数&#xff0c;如果从左向 右读&#xff08;称之为正序数&#xff09;和从右向左读&#xff08;称之为倒序数&#xff09;是一样的&#xff0c;这样的数就叫回文数。输入两个整数m和n&#xff08;m<n)&#xff0c;输出区间[m&#xff0c;n]之间的回文数。 …

Flowable工作流高级篇

文章目录 一、任务分配和流程变量1.任务分配1.1 固定分配1.2 表达式分配1.2.1 值表达式1.2.2 方法表达式 1.3 监听器分配 2.流程变量2.1 全局变量2.2 局部变量2.3 案例讲解 二、候选人和候选人组1.候选人1.1 定义流程图1.2 部署和启动流程实例1.3 任务的查询1.4 任务的拾取1.5 …

转录组学习第四弹-数据质控

数据质控 将SRR转为fastq之后&#xff0c;我们需要对fastq进行质量检查&#xff0c;排除质量不好的数据 1.质量检查&#xff0c;生成报告文件 ls *fastq.gz|while read id;do fastqc $id;done并行处理 ls *fastq.gz|xargs fastqc -t 102.生成 html 报告文件和对应的 zip 压缩…

2 Advanced Learning Algorithms

文章目录 Week1Neurons and brainNeural network layerForward propagationBuild a netural network ------codeAGIMatrix multiplication ------code Week2Tensorflow--- training detailsactivation functionsMultclass and SoftmaxClassification with multiple outputsAdam…

Android DatePicker(日期选择器)、TimePicker(时间选择器)、CalendarView(日历视图)- 简单应用

示意图&#xff1a; layout布局文件&#xff1a;xml <?xml version"1.0" encoding"utf-8"?> <ScrollView xmlns:android"http://schemas.android.com/apk/res/android"xmlns:app"http://schemas.android.com/apk/res-auto"…

【C/PTA】函数专项练习(一)

本文结合PTA专项练习带领读者掌握函数&#xff0c;刷题为主注释为辅&#xff0c;在代码中理解思路&#xff0c;其它不做过多叙述。 目录 6-1 输出星期名6-2 三整数最大值6-3 数据排序6-4 多项式求值 6-1 输出星期名 请编写函数&#xff0c;根据星期数输出对应的星期名。 函数原…

Redis 5 种基本数据类型详解

Redis 共有 5 种基本数据类型&#xff1a;String&#xff08;字符串&#xff09;、List&#xff08;列表&#xff09;、Set&#xff08;集合&#xff09;、Hash&#xff08;散列&#xff09;、Zset&#xff08;有序集合&#xff09;。 这 5 种数据类型是直接提供给用户使用的&…

中国出海主力系列专访之三七互娱:亚马逊云科技助力三七互娱海外“出圈”之路

如果问&#xff0c;在众多的中国出海赛道中哪一条拥有基数最大的粉丝拥趸&#xff1f;以网络游戏、社交媒体、直播、短视频为代表的泛娱乐赛道便成为当仁不让的领跑者。 在东京、新加坡、开罗、伦敦、纽约、慕尼黑等国际都市&#xff0c;当地的年轻人会随时随地的打开“中国造”…

QT修改windowTitle的名字以及图片

1.修改名字:点击ui的QMainWindow,然后找到windowTitle的选项修改即可 2.修改windowTitle的图片,依旧是找到windowIcon,选择资源,这个资源可以是你放到qrc里面的图片也可以是外置的图片 3.然后运行就可以看到效果了

数字化转型导师坚鹏:数字化时代银行网点厅堂营销5大痛点分析

数字化时代银行网点厅堂营销存在以下5大痛点&#xff1a; 1、业务办理时间较长。目前很多银行业务办理时间仍然较长&#xff0c;可能的原因包括银行业务办理流程比较复杂、柜员操作技能不够熟练、银行系统的稳定性欠佳、网点某段时间客户比较多等。 2、现场提交材料太多。银行…

详解python淘宝秒杀抢购脚本程序实现

文章目录 前言一、官网下载火狐浏览器二、下载geckodriver&#xff0c;并解压到火狐浏览器文件夹根目录三、添加火狐浏览器根目录到系统环境变量四、下载并安装python及pycharm开发工具五、进入淘宝六、使用Pycharm运行脚本&#xff0c;新建python文件&#xff0c;将代码复制到…