《机器学习》—— OpenCV 对图片的各种操作(均值、方框、高斯、中值滤波处理)

文章目录

  • 1、对有椒盐噪声的图片进行均值、方框、高斯、中值滤波处理
  • 2、给图像边缘增加边框
  • 3、对图片进行阈值化操作

1、对有椒盐噪声的图片进行均值、方框、高斯、中值滤波处理

  • 均值滤波

    • cv2.blur是 OpenCV 库中的一个函数,用于对图像进行均值模糊处理。这个函数通过计算图像中每个像素点周围邻域内像素值的平均值,来替换该像素点的值,从而实现模糊效果。这种模糊处理对于去除图像中的噪声或进行图像预处理很有用。
    • 参数说明:
    • dst = cv2.blur(src, ksize, dst=None, anchor=None, borderType=None)
      • src: 输入图像,可以是任意数量的单通道或多通道图像。
      • ksize(重要参数): 模糊核的大小,格式为 (宽度, 高度)。宽度和高度都应该是正数和奇数。
      • dst: 输出图像,与输入图像具有相同的类型和大小。这个参数是可选的。
      • anchor: 锚点;它表示核中心点的位置。默认值是 (-1, -1),表示核的中心位于其几何中心。
      • borderType: 边界像素的外推方法。默认是 cv2.BORDER_DEFAULT。
  • 方框滤波

    • cv2.boxFilter 是 OpenCV 库中的一个函数,用于对图像进行盒式滤波(Box Filtering)。盒式滤波实际上是一种特殊的均值滤波,其中滤波核中的每个元素都相等(通常是1),并且在应用滤波时会进行归一化(即除以核内元素的总数),以确保输出图像的亮度保持不变。然而,在某些实现中,特别是在 OpenCV 的 cv2.boxFilter() 函数中,你可以选择是否进行归一化。
    • 参数说明:
    • dst = cv2.boxFilter(src, ddepth, ksize, normalize=None, anchor=None, borderType=None)
      • src: 输入图像。
      • ddepth(重要参数): 输出图像的所需深度。如果为 -1,则输出图像将与输入图像具有相同的深度,但请注意归一化行为的差异(尽管 normalize 参数已被废弃)。对于大多数用途,你可能希望将 ddepth 设置为 cv2.CV_8U、cv2.CV_16U、cv2.CV_16S、cv2.CV_32F 或 cv2.CV_64F 之一,以明确指定输出图像的位数。
      • ksize(重要参数): 滤波核的大小,格式为 (宽度, 高度)。宽度和高度都应该是正数和奇数。
      • normalize(已废弃): 布尔值,指示是否对结果进行归一化。在 OpenCV 4.x 及更高版本中,此参数已被废弃,因为归一化行为现在通过 ddepth 参数隐式控制。但是,由于它已被废弃,因此在使用新版本时应忽略此参数。
      • anchor: 锚点;它表示核中心点的位置。默认值是 (-1, -1),表示核的中心位于其几何中心。
      • borderType: 边界像素的外推方法。
  • 高斯滤波

    • cv2.GaussianBlur 是 OpenCV 库中用于对图像进行高斯模糊的函数。高斯模糊是一种广泛使用的图像模糊技术,它通过为图像中的每个像素点计算其周围像素点的加权平均值来工作,其中权重由高斯函数给出。这种模糊方法在处理图像时能够有效地减少图像噪声和细节层次,同时保持边缘相对清晰。
    • 参数说明:
    • dst = cv2.GaussianBlur(src, ksize, sigmaX, sigmaY=0, dst=None, borderType=None)
      • src: 输入图像。
      • ksize(重要参数): 高斯核的大小,(宽度, 高度)。宽度和高度都应为正数和奇数,或者可以是从零传递的 (sigmaX, sigmaY)。然后从这些 sigma 值中导出窗口大小。如果 sigma 为零,则它们从 ksize.width 和 ksize.height 中计算得出;否则,ksize.width 和 ksize.height 被忽略。
      • sigmaX: X 方向上的高斯核标准偏差。
      • sigmaY: Y 方向上的高斯核标准偏差;如果 sigmaY 为零,则与 sigmaX 相同;如果两者都为零,则分别从 ksize.width 和 ksize.height 中计算得出。对于大多数用途,可以将 sigmaX 和 sigmaY 设置为相同的值。
      • dst: 输出图像;这个参数是可选的。
      • borderType: 像素外推法的标志;默认值是 cv2.BORDER_DEFAULT。
  • 中值滤波

    • cv2.medianBlur 是 OpenCV 库中用于对图像进行中值模糊的函数。中值模糊是一种非线性的滤波技术,它用图像中每个像素点周围邻域内像素值的中位数来替换该像素点的值。这种方法对于去除椒盐噪声(salt-and-pepper noise)特别有效,因为它基于排序操作而不是平均值计算,因此能够更好地保持边缘信息。
    • 参数说明:
    • dst = cv2.medianBlur(src, ksize)
      • src: 输入图像,必须是单通道图像(灰度图)或每个通道分别处理的多通道图像。
      • ksize(重要参数): 中值滤波核的大小,必须是大于1的奇数。
    # 创建制造椒盐噪声的函数
    def add_peppersalt_noise(ManBa, n=10000):result = ManBa.copy()w, h = ManBa.shape[:2]  # 获取图片的高和宽for i in range(n):  # 生成n个椒盐噪声x = np.random.randint(1, w)y = np.random.randint(1, h)if np.random.randint(0, 2) == 0:result[x, y] = 0else:result[x, y] = 255return resultMB = cv2.imread('kobe.jpg')  # 获取原图
    ManBa = cv2.resize(MB, dsize=None, fx=0.4, fy=0.4)  # 设置图片大小
    cv2.imshow('sro', ManBa)
    cv2.waitKey(0)noise = add_peppersalt_noise(ManBa)  # 生成椒盐噪声图片
    cv2.imshow('noise', noise)
    cv2.waitKey(0)"""均值滤波   blur """
    blur_1 = cv2.blur(noise, (3, 3))  # 卷积核为3,3
    cv2.imshow('blur_1', blur_1)
    cv2.waitKey(0)"""方框滤波  boxFilter """
    boxFilter_1 = cv2.boxFilter(noise, -1, (3, 3), normalize=True) # 深度为-1, 滤波核为3*3
    cv2.imshow('boxFilter_1', boxFilter_1)
    cv2.waitKey(0)"""高斯滤波  GaussianBlur """
    GaussianBlur_1 = cv2.GaussianBlur(noise, (3, 3), 1)# 高斯核大小为3*3,高斯核标准偏差为1
    cv2.imshow('GaussianBlur_1', GaussianBlur_1)
    cv2.waitKey(0)"""中值滤波  medianBlur """
    medianBlur_1 = cv2.medianBlur(noise, 3)  # 滤波核为3*3
    cv2.imshow('medianBlur_1', medianBlur_1)
    cv2.waitKey(0)
    cv2.destroyAllWindows()
    
  • 原图椒盐噪声图
    在这里插入图片描述

  • 均值滤波方框滤波处理后的图
    在这里插入图片描述

  • 高斯滤波中值滤波处理后的图
    在这里插入图片描述

  • 由结果可以看出中值滤波对有椒盐噪声的图片处理的效果最好

2、给图像边缘增加边框

  • cv2.copyMakeBorder是OpenCV库中的一个函数,用于给图像添加额外的边界(padding)

  • 它有以下几个参数:

  • cv2.copyMakeBorder(src, top, bottom, left, right, borderType, value=None)

    • src:要扩充边界的原始图像
    • top, bottom, left, right:相应方向上的边框宽度(以像素为单位)
    • borderType:定义要添加边框的类型,它可以是以下的一种:
      • cv2.BORDER_CONSTANT:添加的边界框像素值为常数(需要再额外给定一个参数 value -> 指定边框的颜色值)
      • cv2.BORDER_REFLECT:添加的边界框像素将是边界元素的镜面反射,类似于-hgfedcba|abcdefgh|hgfedcba (交界处也复制了)
      • cv2.BORDER_REFLECT101 或 cv2.BORDER_DEFAULT:和上面类似,但是有一些细微的不同,类似于hgfedcb|abcdefgh|gfedcba (交界处删除了)
      • cv2.BORDER_REPLICATE:使用最边界的像素值代替,类似于aaaaaaa|abcdefgh|hhhhhhh
      • cv2.BORDER_WRAP:上下两边替换,左右两边替换
    • value(可选):当 borderType 为 cv2.BORDER_CONSTANT 时,需要指定边框的颜色,默认为黑色。这是一个与源图像具有相同通道数的数组。
    import cv2
    MB = cv2.imread('kobe.jpg')  # 读取原始图片
    ManBa = cv2.resize(MB, dsize=None, fx=0.5, fy=0.5)  # 调整一下图片大小(可选,根据原始图片大小决定)
    top, bottom, left, right = 50, 50, 50, 50 # 设置各方向上的边框宽度constant = cv2.copyMakeBorder(ManBa, top, bottom, left, right, borderType=cv2.BORDER_CONSTANT, value=255)
    reflect = cv2.copyMakeBorder(ManBa, top, bottom, left, right, borderType=cv2.BORDER_REFLECT)
    reflect101 = cv2.copyMakeBorder(ManBa, top, bottom, left, right, borderType=cv2.BORDER_REFLECT101)
    replicate = cv2.copyMakeBorder(ManBa, top, bottom, left, right, borderType=cv2.BORDER_REPLICATE)
    wrap = cv2.copyMakeBorder(ManBa, top, bottom, left, right, borderType=cv2.BORDER_WRAP)cv2.imshow('yuantu', ManBa)
    cv2.waitKey(0)
    cv2.imshow('constant', constant)
    cv2.waitKey(0)
    cv2.imshow('reflect', reflect)
    cv2.waitKey(0)
    cv2.imshow('reflect101', reflect101)
    cv2.waitKey(0)
    cv2.imshow('replicate', replicate)
    cv2.waitKey(0)
    cv2.imshow('wrap', wrap)
    cv2.waitKey(0)
    

    在这里插入图片描述

3、对图片进行阈值化操作

  • cv2.threshold 是 OpenCV 中用于进行阈值化操作的一个非常基础的函数。阈值化是一种简单的图像分割技术,它将图像转换成黑白图像(或二值图像),或者将图像划分为几个区域。这种技术通常用于预处理图像,以便进行进一步的分析,如边缘检测、图像分割等

  • 它有以下几个参数:

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

    • src:要进行阈值处理的源图像,应该是灰度图。
    • thresh:阈值的具体值。
    • maxval:当像素值超过(或有时是小于,取决于阈值类型)阈值时应该被赋予的新值。
    • type:阈值化操作的类型。这个参数决定了函数的行为。常用的值有:
      • cv2.THRESH_BINARY
      • cv2.THRESH_BINARY_INV
      • cv2.THRESH_TRUNC
      • cv2.THRESH_TOZERO
      • cv2.THRESH_TOZERO_INV
      • cv2.THRESH_OTSU 和 cv2.THRESH_TRIANGLE 用于自动计算最佳阈值(此时thresh参数被忽略,仅作为占位符)。
    • dst:这个参数是可选的,用于存储函数的输出图像。
    MB = cv2.imread('kobe.jpg', cv2.IMREAD_GRAYSCALE)  # 读取图片,并转换为灰度图
    ManBa = cv2.resize(MB, dsize=None, fx=0.4, fy=0.4)   # 设置图片大小ret, binary = cv2.threshold(ManBa, 155, 255, cv2.THRESH_BINARY)
    ret1, binaryinv = cv2.threshold(ManBa, 155, 255, cv2.THRESH_BINARY_INV)
    ret2, trunc = cv2.threshold(ManBa, 155, 255, cv2.THRESH_TRUNC)
    ret3, tozero = cv2.threshold(ManBa, 155, 255, cv2.THRESH_TOZERO)
    ret4, tozeroinv = cv2.threshold(ManBa, 155, 255, cv2.THRESH_TOZERO_INV)cv2.imshow('yuantu', ManBa)
    cv2.waitKey(0)
    cv2.imshow('binary', binary)
    cv2.waitKey(0)
    cv2.imshow('binaryinv', binaryinv)
    cv2.waitKey(0)
    cv2.imshow('trunc', trunc)
    cv2.waitKey(0)
    cv2.imshow('tozero', tozero)
    cv2.waitKey(0)
    cv2.imshow('tozeroinv', tozeroinv)
    cv2.waitKey(0)
    

在这里插入图片描述

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

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

相关文章

webserver.h详解

webserver.h头文件 成员变量&#xff1a; 目的是提供一个完整的Web服务器框架&#xff0c;包括网络监听、事件处理、数据库连接管理、线程池管理等功能。 #ifndef WEBSERVER_H #define WEBSERVER_H#include <sys/socket.h> #include <netinet/in.h> #include <…

算法学习-基础数据结构

基础数据结构 一.栈 1.普通栈 套路&#xff1a;从前往后遍历 需要考虑相邻元素 有消除操作 栈。 2.单调栈 二.队列 1.普通队列 2.优先队列 三.Trie 使用场景&#xff1a;可以求某个字符串在众多字符串中出现的次数&#xff0c;以某个字符串为前缀出现的次数 Trie中…

一. 初始 Spring Boot

一. 初始 Spring Boot 文章目录 一. 初始 Spring Boot1. Spring Boot 是什么&#xff1f;2. Spring Boot 官方文档地址3. 第一个 Spring Boot 程序3.1 我的环境工具配置 4. 第一个 SpringBoot 程序解释说明5. Spring&#xff0c;SpringMVC&#xff0c; SpringBoot 三者的关系6.…

Linux中的常见命令——用户管理命令

1、useradd添加新用户 基本语法 语法功能描述useradd 用户名添加新用户useradd -g 组名 用户名添加新用户到某个组 实操案例 1、添加一个新用户【此时的用户是没有密码的】 [rootcentos100 ~]# cd /home [rootcentos100 home]# ls www zss [rootcentos100 home]# useradd…

设置虚拟机使用主机以太网而不是WiF连接

虚拟机使用主机的以太网连接而不是Wi-Fi连接&#xff0c;可以通过在虚拟化软件中配置虚拟机的网络设置来实现。以下是一些常见的虚拟化软件&#xff08;如VMware和VirtualBox&#xff09;中设置虚拟机网络以使用以太网连接的步骤&#xff1a; 一、VMware中设置 1、打开虚拟网…

查询系统操作指南

在年会等大型活动中&#xff0c;快速准确地查询桌号和座位号对于参与者来说至关重要。本文将详细介绍如何使用查询系统来实现这一目的。步骤一&#xff1a;电脑端信息上传 1. 访问官网&#xff1a;打开云分组的官方网站。 2. 登录账户&#xff1a;使用微信扫码的方式进行登录。…

《JavaEE进阶》----3.<SpringBoot项目创建细节大全+打jar包运行>

本篇博客讲解了 创建Spring Boot项目的各种方法及创建细节、还有项目中目录和代码的简单介绍、启动项目、换端口号、Web服务器简介、HTTP状态码、以及用Maven打jar包运行。 什么是Spring Spring让开发Java工程项目变得更快、更简单、更安全。 它专注于开发工程时的速度、简化…

Kafka命令详解:从零开始,掌握Kafka集群管理、主题操作与监控的全方位技能,理解每一条命令背后的逻辑与最佳实践

本文主要是关于Kafka的命令详解&#xff0c;每个命令都进行了非常详细的注释&#xff0c;帮助大家能更好的理解这些命令背后的含义&#xff0c;从底层去理解&#xff0c;如果大家喜欢&#xff0c;请多多点赞关注&#xff0c;欢迎评论&#xff01; 为大家推荐几篇比较好的Kafka文…

【第0002页 · 枚举】月月查华华的手机

【前言】本文以及之后的一些题解都会陆续整理到目录中&#xff0c;若想了解全部题解整理&#xff0c;请看这里&#xff1a; 第0002页 月月查华华的手机 不知道在看的各位有没有被家里人查过手机呢&#xff1f;如果有&#xff0c;想必今天你会感同身受一些。我们现在要来看一道…

什么是BI?BI系统的功能有哪些?哪些人需要BI工具支持?

什么是BI&#xff1f; BI是商业智能&#xff08;Business Intelligence&#xff09;的缩写。它是指通过收集、整理、分析和可视化企业内部和外部数据&#xff0c;从中获得洞察信息和决策支持的技术和流程。BI利用数据分析工具和技术&#xff0c;帮助企业管理者和决策者更好地理…

神经网络算法 - 一文搞懂One-Hot Encoding(独热编码)

本文将从独热编码的原理、独热编码的分类、独热编码的应用三个方面&#xff0c;带您一文搞懂独热编码 One-Hot Encoding 。 独热编码 特征数字化&#xff1a;将分类变量&#xff08;或称为离散特征、无序特征&#xff09;转换为一种适合机器学习算法处理的格式。 特征数字化 为…

Jenkins发邮件功能如何配置以实现自动化?

jenkins发邮件的设置指南&#xff1f;Jenkins怎么配置服务器&#xff1f; Jenkins作为一个流行的自动化服务器&#xff0c;其发邮件功能是通知团队成员构建状态的重要手段。AokSend将详细介绍如何配置Jenkins发邮件功能&#xff0c;以实现自动化通知。 Jenkins发邮件&#xf…

Nuxt 项目实战 - 15:自定义unocss规则,让编写样式更高效

与UI设计师约定颜色命名规则 配置color变量 color.scss $colors: ((#ffffff,#f8f8f8,#ebebeb,#dbdbdb,#cccccc,#999999,#666666,#333333,#000000),(#daf6ef, #b4ecde, #08c193, #228f73, #43d7b2),(#f62f3b, #edc9c9, #f0e2e2, #ffecea, #f78185),(#f2f5f8, #e3e8eb, #c3cace, …

AI 大模型时代,对前端工程师有哪些机遇和挑战?

随着人工智能的发展&#xff0c;AI大模型为人工智能领域带来了巨大的机遇和挑战。前端工程师作为软件开发的重要一环&#xff0c;也需要关注 AI 大模型的发展趋势&#xff0c;并探索如何将其应用于前端开发和优化中。 AI 大模型应用广泛&#xff0c;已经深入到各个行业&#x…

超声波清洗机哪个品牌比较耐用?家用超声波清洗机推荐

随着生活质量的提升&#xff0c;高品质眼镜日益受到青睐。遗憾的是&#xff0c;眼镜的恰当清洁与养护往往被忽视&#xff0c;导致镜片模糊、沾染污渍&#xff0c;直接影响视觉享受。为此&#xff0c;超声波眼镜清洗机应运而生&#xff0c;成为众多消费者的新选择&#xff0c;同…

Linux系统中没有安装 wget 命令

Linux系统中没有安装 wget 命令 1、Linux系统中没有安装 wget 命令2、安装 wget 1、Linux系统中没有安装 wget 命令 这个错误表明系统中没有安装 wget 命令。 2、安装 wget 如果 Linux 系统中没有安装 wget 命令&#xff0c;可以按照以下方法进行安装&#xff1a; 一、Cent…

Mysql基础练习题 181.找到收入比经理高的员工 (力扣)

181.找到收入比经理高的员工 建表插入数据&#xff1a; Create table If Not Exists Employee (id int, name varchar(255), salary int, managerId varchar(10)); Truncate table Employee insert into Employee (id, name, salary, managerId) values (1, Joe, 70000, 3); …

springboot农村留守儿童援助系统-计算机毕设 附源码 16875

springboot农村留守儿童援助系统 摘要 随着信息技术在管理上越来越深入而广泛的应用&#xff0c;管理信息系统的实施在技术上已逐步成熟。本文介绍了农村留守儿童援助系统的开发全过程。通过分析农村留守儿童援助系统管理的不足&#xff0c;创建了一个计算机管理农村留守儿童援…

伴奏提取怎么弄?这款神器让你的音乐创作无界限

记得在无数个夜晚&#xff0c;我沉浸在自己喜爱的歌曲中&#xff0c;每当旋律响起&#xff0c;就忍不住想要跟唱&#xff0c;但纯净的伴奏总是难觅踪迹。但自从我发现了伴奏提取怎么操作的秘密&#xff0c;一切变得简单起来&#xff01; 无论是家庭聚会&#xff0c;还是朋友K歌…

阿里云OSS文件存储

文章目录 参考准备创建bucketendpoint 和 bucket域名的访问路径AccessKey和OSS的开发文档 Springboot整合OSS引入依赖AliyunOssConfigAliyunOssPropertiesapplicatioin.yml简单上传和下载使用签名URL进行临时授权访问生成以PUT方法访问的签名URL来上传文件通过签名URL临时授权简…