【Python_Opencv图像处理框架】图像阈值与滤波

news2024/10/5 15:24:41

写在前面

本篇文章是opencv学习的第二篇文章,主要讲解了图像的阈值和滤波操作,作为初学者,我尽己所能,但仍会存在疏漏的地方,希望各位看官不吝指正❤️


写在中间

一、 图像阈值

( 1 )简单介绍

图像阈值是数字图像处理中常用的一种方法,通过指定一个阈值(Threshold),将图像中的像素分为两类:大于阈值的像素设置为一种颜色,小于阈值的像素设置为另一种颜色。这样可以将一些噪声或者无用的信息分离出来,帮助进一步处理图像。

( 2 )操作实现

ret, dst = cv2.threshold(src, thresh, maxval, type)

解释

 src:输入图,仅单通道灰度图;thresh阈值;maxval最大值;type阈值类型。

阈值类型

  • cv2.THRESH_BINARY:二值化操作,像素值大于阈值的点用maxval最大值表示,小于阈值用0表示。

  • cv2.THRESH_BINARY_INV:表示阈值的二值化翻转操作,大于阈值的使用0表示,小于阈值的使用最大值表示。

  • cv2.THRESH_TRUNC:截断操作,大于阈值的使用阈值表示,小于阈值的不变。

  • cv2.THRESH_TOZERO:化零操作,大于阈值的不变,小于阈值的使用0表示

  • **cv2.THRESH_TOZERO_INV:**化零操作的翻转,大于阈值的使用0表示,小于阈值的不变

( 3 )代码示例

img = cv2.imread("自行右键复制图片路径", 0) # 以灰度模式读入图像

ret, thresh1 = cv2.threshold(img, 127, 255, cv2.THRESH_BINARY)  # 二值化操作,像素值大于127的点用225表示,小于阈值使用0表示
ret, thresh2 = cv2.threshold(img, 127, 255, cv2.THRESH_BINARY_INV)  # 大于阈值的使用0表示,小于阈值的使用最大值表示
ret, thresh3 = cv2.threshold(img, 127, 255, cv2.THRESH_TRUNC)  # 截断操作,大于阈值的使用阈值表示,小于阈值的不变。
ret, thresh4 = cv2.threshold(img, 127, 255, cv2.THRESH_TOZERO)  # 化零操作,大于阈值的不变,小于阈值的使用0表示
ret, thresh5 = cv2.threshold(img, 127, 255, cv2.THRESH_TOZERO_INV)  # 化零操作的翻转,大于阈值的使用0表示,小于阈值的不变

titles = ['img', 'Binary', 'Binary_inv', 'Trunc', 'Tozero', 'Tozero_inv']
images = [img, thresh1, thresh2, thresh3, thresh4, thresh5]

for i in range(6):
    plt.subplot(2, 3, i + 1)
    plt.imshow(images[i], 'gray')
    plt.title(titles[i])
    plt.xticks([])
    plt.yticks([]) #不显示横纵坐标

plt.show()

( 4 )效果展示

在这里插入图片描述


二、 图像滤波

图像滤波也是数字图像处理中常用的一种方法,通常用于去除图像中的噪声、平滑图像等。滤波器是图像滤波的核心,它在图像上滑动,并对每个像素周围的像素进行计算,将计算结果作为该像素的输出值。


1. 均值滤波

( 1 )简单介绍

图像的简单平滑就是均值滤波,对图像中一定邻域内的像素灰度值求平均值,将平均的结果作为中心像素的灰度保存在结果图中。(在多通道图像中,每个通道需要分别计算。)

( 2 )操作实现

blur = cv2.blur(img, (3, 3))

第一个参数是图像,第二个参数是要进行均值运算的范围

( 3 )代码演示

img = cv2.imread("自行右键复制图片路径")
blur = cv2.blur(img, (3, 3))     # 均值滤波

blur = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)  # 将BGR图片转换为RGB图片
plt.imshow(blur)
plt.show()
cv2.waitKey(0)
cv2.destroyAllWindows()

2. 中值滤波

(1)简单介绍

其主要思想是,对中心像素矩形邻域取中值来替代中心像素。即让临近的像素按照大小排列,取排序后位于中间的像素来代替中心像素。

(2)操作实现

med = cv2.medianBlur(img, 3)

第一个参数是图像,第二个参数是卷积核

(3)代码演示

img = cv2.imread("自行右键复制图片路径")
med = cv2.medianBlur(img, 3)  # 均值滤波

med = cv2.cvtColor(med, cv2.COLOR_BGR2RGB)  # 将BGR图片转换为RGB图片
plt.imshow(med)
plt.show()
cv2.waitKey(0)
cv2.destroyAllWindows()

3. 高斯滤波

(1)简单介绍

高斯滤波基于高斯函数的性质,在图像中以窗口形式移动,对窗口中的像素进行加权平均操作。该加权操作是基于高斯函数的值,距离窗口中心像素越近的像素得到的权重越大,距离越远的像素得到的权重越小。这样可以使窗口中的噪声像素或细节被平滑掉,同时保留图像的整体结构和边缘信息。

(2)操作实现

Gausi = cv2.GaussianBlur(img, (3, 3), 1)

img:需要进行高斯模糊的原始图像。

(3,3):高斯核大小,指定的是一个NN的矩阵,此处为33的矩阵。

1:高斯函数方差,用来控制模糊程度。值越大,图像越模糊。常用的方差值为1、2、3。

(3)代码演示

img = cv2.imread("自行右键复制图片路径")
Gausi = cv2.GaussianBlur(img, (3, 3), 1)  # 往x方向偏移量

Gausi = cv2.cvtColor(Gausi, cv2.COLOR_BGR2RGB)  # 将BGR图片转换为RGB图片
plt.imshow(Gausi)
plt.show()
cv2.waitKey(0)
cv2.destroyAllWindows()

4. 图像拼接

( 1 )简单介绍

在上面我们学习了三种滤波方式来优化图像,为了方便直观的展示三者的区别,我们就学习图像拼接技术,讲三张图像拼接在一起。

( 2 )操作实现

np.hstack((img, blur, med, Gausi))

参数十分简单,就直接传入要拼接的图像

( 3 )代码演示

注意下面的操作要引入对应的包,并且要附带上三张图片

res = np.hstack((img, blur, med, Gausi))

plt.imshow(res)
plt.show()
cv2.waitKey(0)
cv2.destroyAllWindows()

( 4 )效果展示

在这里插入图片描述


写在最后

👍🏻 点赞,你的认可是我创作的动力!
⭐ 收藏,你的青睐是我努力的方向!
✏️ 评论,你的意见是我进步的财富!

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

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

相关文章

扩散模型原理记录

1 扩散模型原理记录 参考资料: [1]【54、Probabilistic Diffusion Model概率扩散模型理论与完整PyTorch代码详细解读】 https://www.bilibili.com/video/BV1b541197HX/?share_sourcecopy_web&vd_source7771b17ae75bc5131361e81a50a0c871 [2] https://t.bili…

音视频通讯QoS技术及其演进

利用多种算法和策略进行网络传输控制,最大限度满足弱网场景下的音视频用户体验。 良逸|技术作者 01 什么是QoS?音视频通讯QoS是哪一类? QoS(Quality of Service)是服务质量的缩写,指一个网络能够…

MoE 系列(二)|Golang 扩展从 Envoy 接收配置

文|朱德江(GitHub ID:doujiang24) MOSN 项目核心开发者蚂蚁集团技术专家 专注于云原生网关研发的相关工作 本文 1445 字 阅读 5 分钟 上一篇我们用一个简单的示例,体验了用 Golang 扩展 Envoy 的极速上手。 这次我们再通过一个…

这篇把「精准测试」算是讲明白了

作为测试同学,我们经常在工作中会有这样的困惑:我写的用例真的有效且全面吗,我的测试真的做到有效覆盖了吗?回归阶段我到底需要回归什么,回归验证充分吗?这次的改动到底影响范围有多大?针对以上…

JAVA集成强密码校验

JAVA集成强密码校验 1 : 背景2 : 代码设计编写2.1 : 引入规则配置2.2 : 密码校验工具类 3 : 验证4 : 相关链接 1 : 背景 最近系统需要做用户密码升级,增加强密码校验,密码长度,复杂度等等,所以整理了一份通用的密码复杂度控制代码…

你了解这2类神经性皮炎吗?常常预示着这5类疾病!

属于慢性皮肤病,患者皮肤可出现局限性苔藓样变,同时伴有阵发性瘙痒。神经性皮炎易发生在颈部两侧和四肢伸侧,中年人是高发人群。到目前为止神经性皮炎病因还并不是很明确,不过一部分病人发病前常常出现精神神经方面异常&#xff0…

SLAM 十四讲(第一版)各章方法总结与理解

SLAM 十四讲(第一版)各章方法总结与理解 总结十四讲中各章各步骤提到的各种方法,以及具体方法在哪个 c 库中可以调用。目的在于能更直观地了解 slam 过程各步骤到底在做什么,以及是怎么联系在一起的。 2. 初识 SLAM SLAM&#x…

ggplot作图中的图例处理方法

文章目录 改变坐标轴和图例的名称方法1, labs()方法2,scale_xxx_discrete/continuous() 删除坐标轴和图例的名称方法1, labs()方法2,scale_xxx_discrete/continuous()方法3,theme()方法4,guides()可以去图例名称 改变图…

怎么挣点零花钱,哪里可以赚点零花钱?以下这些方式值得参考一下

想赚零花钱的人群包括但不限于:大学生、宝妈/宝爸、自由职业者、比较有闲暇时间的上班族。 他们想要赚零花钱的原因不尽相同,但主要就是这几点:经济需求、个人发展、好奇心和乐趣等等。想赚取零花钱的人具有实际需求和个人发展的目标&#xf…

【hello C++】模板初阶

目录 1. 泛型编程 2. 函数模板 2.1 函数模板的概念 2.2 函数模板格式 2.3 函数模板的原理 2.4 函数模板的实例化 2.5 模板参数的匹配原则 3. 类模板 3.1 类模板的定义格式 3.2 类模板的实例化 4. STL简介 4.1 什么是STL 4.2 STL的版本 4.3 STL的六大组件 4.4 STL的重要性 4.5 …

基于.Net开发的ChatGPT客户端,兼容Windows、IOS、安卓、MacOS、Linux

2023年目前要说最热的点,肯定是ChatGPT了。 ChatGPT官方提供的网页版本,还有需要科学上网,很多人都会基于此进行封装。 现在是移动互联网时代,基于手机APP的需求还是很大的。 所以,今天给大家推荐一个ChatGPT客户端开源项目,兼容苹果和安卓手机、PC。 项目简介 这是…

若依管理系统修改页面标题和logo

一:修改网页上的logo 把public目录下favicon.ico,换成自己logo 注:替换图片的名字最好还是以favicon.ico命名,如果改变,就要改public目录下的index.html代码 二:修改页面上的logo 把src/assets/logo/logo.png换成自己l…

【Chano的SFM教程】3dmax 面部表情.VTA基本制作教程

本篇教程作者为:小鸟Chano,转载请表明作者和出处:CSDN 欢迎观看本次教程 本教程将会为你演示使用3D MAX 制作一个基本的SFM表情控制器【表情滑条】并导入SFM进行使用。 Chano自己也是近期才掌握的这项知识,所以过程中可能有很多…

GDB调试实验

一、实验准备 在 Linux 环境软件开发中,GDB 是调试 C 和 C 程序的主要工具。本次实验围绕着GDB常用的调试操作进行。 1、设置断点的意义 当我们想查看变量内容,堆栈情况等等,可以指定断点。程序执行到断点处会暂停执行。break 命令用来设置…

React 条件渲染组件

组件通常需要根据不同的条件显示不同的内容,以及根据应用的状态变化只渲染其中的一部分。 在 React 中,可以使用 JavaScript 语法有条件地呈现 JSX,比如 if 语句、&&和 ?: 操作符。 根据条件返回 JSX Demo.js 文件: …

【高危】vm2 <3.9.17 沙箱逃逸漏洞(POC)(CVE-2023-30547 )

漏洞描述 vm2 是一个基于 Node.js 的沙箱环境,可以使用列入白名单的 Node 内置模块运行不受信任的代码。 由于 CVE-2023-29199 的修复不完整,vm2 3.9.17 之前版本的 transformer.js 文件中的 transformer 函数异常处理逻辑存在缺陷。攻击者可以利用这个…

【01-Java Web先导课】-如何进行JDK的安装(或Java环境的配置)

文章目录 一、JDK(jdk-8u371-windows-x64.exe)的下载1、下载网址2、选择相应版本进行下载 二、JDK(jdk-8u371-windows-x64.exe)的安装1、JDK安装2、系统环境变量配置3、classspath环境变量设置 免责说明 一、JDK(jdk-8…

❤echarts 南丁格尔玫瑰图的使用以及南丁格尔玫瑰图详细配置

❤echarts 南丁格尔玫瑰图的使用以及南丁格尔玫瑰图详细配置 1、认识 使用可以参考之前文章,会使用直接跳过1 引入官网的南丁格尔玫瑰图效果如下: 使用函数配置分为三个部分:初始化> 设置配置> 地图使用参数 配置代码如下 option…

法学考生必看—外经贸法学专业在职研究生

法学专业就业面比较广,但很多人工作后都觉得还是缺少核心竞争力,想通过读研来改变现状,23考研已经落幕,想要今年就能入班学习的院校有吗?有法学专业的吗? 一、学校介绍 对外经济贸易大学创建于1951年&…

STM32 USB资料整理

CypressUSB中文文档 https://img.anfulai.cn/bbs/90026/AN57294%20USB%20101%20An%20Introduction%20to%20Universal%20Serial%20Bus%202.0%20(Chinese).pdf RL-USB教程 https://www.armbbs.cn/forum.php?modviewthread&tid99710 USB应用实战教程第3期:手把…