OpenCV(七)——灰度图像的阙值处理以及图像的边界填充

news2024/12/24 9:37:11

灰度图像的阙值处理

在OpenCV中利用threshold()对灰度图像进行阙值处理,该函数通过将图像中的每个像素值与一个给定的阈值进行比较来工作。如果像素值超过这个阈值,那么像素值将被设置成指定的最大值;如果没有超过阈值,则根据不同的阈值类型,可能会被设置为0或者保持原值。其中有5中基本类型的阙值。

注:五种基本类型的阙值分别和作用分别为:

  • cv2.THRESH_BINARY: 当像素值超过阈值时,设置像素值为最大值,否则设置为0。
  • cv2.THRESH_BINARY_INV: 与cv.THRESH_BINARY相反,当像素值超过阈值时设置为0,否则设置为最大值。
  • cv2.THRESH_TRUNC: 当像素值超过阈值时,设置像素值为阈值,而不是最大值。
  • cv.THRESH_TOZERO: 当像素值超过阈值时保持不变,否则设置为0。
  • cv2.THRESH_TOZERO_INV: 与cv.THRESH_TOZERO相反,当像素值超过阈值时设置为0,否则保持不变。

例如:

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

img=cv2.imread(r'D:\Photo\1.jpeg')
ret,thresh1=cv2.threshold(img,127,255,cv2.THRESH_BINARY)
ret,thresh2=cv2.threshold(img,127,255,cv2.THRESH_BINARY_INV)
ret,thresh3=cv2.threshold(img,127,255,cv2.THRESH_TRUNC)
ret,thresh4=cv2.threshold(img,127,255,cv2.THRESH_TOZERO)
ret,thresh5=cv2.threshold(img,127,255,cv2.THRESH_TOZERO_INV)

titles=['Original Image','BINARY','BINARY_INV','TRUNC','TOZERO','TOZERO_INV']
images=[img,thresh1,thresh2,thresh3,thresh4,thresh5]

for i in range(6):
    cv2.imshow(titles[i],images[i])
cv2.waitKey(0)
cv2.destroyAllWindows()

这段代码是使用OpenCV库对图像进行阈值处理,并显示处理后的图像。首先导入所需的库,然后读取一张图片并将其转换为灰度图像。接着使用不同的阈值处理方法对灰度图像进行处理,包括二值化、反二值化、截断和零处理等。最后将处理后的图像显示出来。

运行结果如下所示(六张图两两一组):

原图和BINARY

BINARY_INY和TRUNC

TOZERO和TOZERO_INV​​​​​​

在上面所有的图片中,阙值被设定为了127。在TERESH_BINARY中,如果图像中的像素点超过127设置为最大值(白色部分),没超过则直接变为0(黑色部分);在TERESH_BINARY_INV中,如果图像的像素点超过127直接变为0(黑色部分),否则设置为最大值(白色部分),可以看到TERESH_BINARY_INV与TERESH_BINARY是内容黑白完全相反的;在TERESH_TRUNC中,超过阙值的部分设置为阙值大小(执行后图像内没有超过阙值的像素);在TERESH_TOZERO中,超过阙值的部分保持不变,其余部分变为0(黑色部分);TERESH_TOZERO_INV中,超过阙值的部分变为0(黑色部分),没超过的部分保持不变。

边界填充

在OpenCV中,使用copyMakeBorder()函数对于边界进行填充。在copyMakeBorder()函数中,需要有几个参数,基本形式是:cv2.copyMakeBorder(src, top, bottom, left, right, borderType, value),对其基本形式的解释是:

  • src:输入图像。
  • top:上边框的宽度。
  • bottom:下边框的宽度。
  • left:左边框的宽度。
  • right:右边框的宽度。
  • value:当borderTypecv2.BORDER_CONSTANT时,用于填充边框的颜色值。
  • borderType:边框类型,可以是以下几种之一:
  1. cv2.BORDER_REPLICATE:复制最边缘的像素来填充边框。
  2. cv2.BORDER_REFLECT:反射图像边界像素来填充边框。
  3. cv2.BORDER_REFLECT_101:类似于cv2.BORDER_REFLECT,但略有不同。
  4. cv2.BORDER_WRAP:将图像边界像素循环复制到边框区域。
  5. cv2.BORDER_CONSTANT:使用指定的常量值填充边框。

 下面我们可以比较不同的情况下,不同的边框类型所产生的不同影响。如下这个示例:

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

img=cv2.imread(r'D:\Photo\1.jpeg')
top_size,botton_size,left_size,right_size=(50,50,50,50)
img_replicate=cv2.copyMakeBorder(img,top_size,botton_size,left_size,right_size,borderType=cv2.BORDER_REPLICATE)
img_reflect=cv2.copyMakeBorder(img,top_size,botton_size,left_size,right_size,borderType=cv2.BORDER_REFLECT)
img_reflect101=cv2.copyMakeBorder(img,top_size,botton_size,left_size,right_size,borderType=cv2.BORDER_REFLECT_101)
img_wrap=cv2.copyMakeBorder(img,top_size,botton_size,left_size,right_size,borderType=cv2.BORDER_WRAP)
img_constant=cv2.copyMakeBorder(img,top_size,botton_size,left_size,right_size,borderType=cv2.BORDER_CONSTANT,value=0)

res=[img,img_replicate,img_reflect,img_reflect101,img_wrap,img_constant]
titles=['ORIGINAL','REPLICATE','REFLECT','REFLECT_101','WRAP','CONSTANT']

for i in range(6):
    plt.subplot(2,3,i+1)
    plt.imshow(res[i],'gray')
    plt.title(titles[i])

plt.show()

运行结果如下所示:

可以看到图片1为原图;在图片2中直接是以图片的边框所在的像素内容为扩展(可以看到图片2中很多是直线形状的); 而图片3的内容,是通过映射原图像的内容(可以看到图3的内容有对称的部分);而图片4的的内容与图3类似;图片5就是循环填充,就是将像素平铺展示;而图片6就是将图片扩展的部分直接设置成了黑色。

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

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

相关文章

【干货】【常用电子元器件介绍】【晶体三极管】(二)--晶体三极管的应用

声明:本人水平有限,博客可能存在部分错误的地方,请广大读者谅解并向本人反馈错误。 一、 三极管电路的链接形式 三极管(transistor)是近代电子电路的核心组件。其 主要功能是做电流的开关,就如同控制水管中水流量的阀 (valve)。三极管工作情况模拟示意图如下图所示。   …

企业网站为什么要用OV级别的SSL证书?

部署OV SSL证书的网站,可在SSL证书详情中查看网站所属企业名称,可以让用户有效区分出钓鱼网站,鉴别网站的真实身份。企业网站为啥要选OV(组织验证)SSL证书呢?主要有这么几个原因: 1.安全等级更高…

uiCA模拟器和bHive benchmark的使用

概念 uiCA 基本块吞吐量预测器 github地址:GitHub - andreas-abel/uiCA: uops.info Code Analyzer uiCA是一个模拟器,可以预测基本块在最新的英特尔微体系结构上的吞吐量。除此之外,它还提供了代码执行的洞察。 uiCA基于来自uops.info的数…

SpringCloud Hystrix 断路器

一、前言 接下来是开展一系列的 SpringCloud 的学习之旅,从传统的模块之间调用,一步步的升级为 SpringCloud 模块之间的调用,此篇文章为第五篇,即介绍 Hystrix 断路器。 二、概述 2.1 分布式系统面临的问题 复杂分布式体系结构中…

深入探究Java中的TransferQueue:机制、特性与应用场景

码到三十五 : 个人主页 心中有诗画,指尖舞代码,目光览世界,步履越千山,人间尽值得 ! TransferQueue是Java并发包中的一个强大工具,专为需要精确的数据传递场景而设计。它实现了BlockingQueue接口&#xf…

Midjourney绘图欣赏系列(十)

Midjourney介绍 Midjourney 是生成式人工智能的一个很好的例子,它根据文本提示创建图像。它与 Dall-E 和 Stable Diffusion 一起成为最流行的 AI 艺术创作工具之一。与竞争对手不同,Midjourney 是自筹资金且闭源的,因此确切了解其幕后内容尚不…

快速构建Vue2/Vue3项目

1.创建一个空文件夹 我创建了一个vue的空文件夹 2.使用vscode打开 3.终端输入npm init -y npm init -y 含义是项目初始化 运行后会出现一个文件:package.json 在运行第四步前,我的项目出现的问题!!! 就是我的文件…

Go——运算符,变量和常量,基本类型

一.运算符 Go语言内置的运算符有: 算术运算符 关系运算符 逻辑运算符 位运算符 赋值运算符 1.1 算术运算符 注意:(自增)和--(自减)在go语言中是单独的语句,并不是运算符。 1.2 关系运算符 1.3 逻辑运算符 1.4 位运算符 位运算符对整数在内存…

【每日八股】Java基础经典面试题2

前言:哈喽大家好,我是黑洞晓威,25届毕业生,正在为即将到来的秋招做准备。本篇将记录学习过程中经常出现的知识点以及自己学习薄弱的地方进行总结🥰。 本篇文章记录的Java基础面试题,适合在学Java基础的小白…

给多篇文章注音 只要拼音不要汉字 怎么办?快看过来 小编帮你解决

在日常办公和学习中,我们有时需要对Word文档中的文字进行拼音标注,特别是当我们需要教授儿童识字或者制作一些特殊的文档时。然而,很多时候,我们可能只需要拼音而不需要汉字本身。那么,如何在Word中给文字注音&#xf…

【你也能从零基础学会网站开发】Web建站之javascript入门篇 认识Document文档对象

🚀 个人主页 极客小俊 ✍🏻 作者简介:程序猿、设计师、技术分享 🐋 希望大家多多支持, 我们一起学习和进步! 🏅 欢迎评论 ❤️点赞💬评论 📂收藏 📂加关注 Document对象 …

Rust异步编程 Async Await 入门

Rust Async Await 入门 在本文中,我们将仔细研究 Rust 中的异步编程。到目前为止,我对 Rust 异步的体验主要是从 Stack Overflow 复制代码。本文旨在帮助您了解什么是异步代码以及如何有效地使用它。 什么是异步代码? 要了解什么是异步代码…

openGauss使用BenchmarkSQL进行性能测试(上)

一、前言 本文提供openGauss使用BenchmarkSQL进行性能测试的方法和测试数据报告。 BenchmarkSQL,一个JDBC基准测试工具,内嵌了TPC-C测试脚本,支持很多数据库,如PostgreSQL、Oracle和Mysql等。 TPC-C是专门针对联机交易处理系统…

金融知识分享系列之:MACD指标精讲

金融知识分享系列之:MACD指标精讲 一、MACD指标二、指标原理三、MACD指标参考用法四、MACD计算步骤五、MACD分析要素六、根据快线DIF位置判断趋势七、金叉死叉作为多空信号八、快线位置交叉信号九、指标背离判断行情反转十、差离值的正负十一、差离值的变化十二、指…

K 近邻算法

为什么学习KNN算法 KNN是监督学习分类算法,主要解决现实生活中分类问题。 (1)首先准备数据,可以是视频、音频、文本、图片等等 (2)抽取所需要的一些列特征,形成特征向量 (3&…

iPhone, Android 手机是如何收到推送通知的?

本文转自 公众号 ByteByteGo,如有侵权,请联系,立即删除 iPhone, Android 手机是如何收到推送通知的? 我们的手机或电脑是如何收到推送通知的? 通常我们可以使用消息解决方案 Firebase 来支持通知推送。下图显示了 Fi…

云数据库Redis配置用户名密码连接

一般情况,生产环境6379端口是禁止对外开放的, 所有用户名密码可以不设置。 但是如果有格鲁需求,需要开放redis公网访问,建议端口限制IP,并设置用户密码 spring中配置 阿里云数据库 云数据库 Redis_缓存数据库_高并发_读写分离-阿里云 添加白名单 申请公网访问地址 配…

2024年共享WiFi项目到底怎么样?

共享WiFi项目是近年来兴起的一种新型商业模式,商家通过在自己店铺升级wifi链接模式使其数字化,让用户能够方便地连接到互联网,提升到店体验,增加线上引流。这一项目的出现,为人们的生活带来了诸多便利,同时…

基于SpringBoot的“实习管理系统”的设计与实现(源码+数据库+文档+PPT)

基于SpringBoot的“实习管理系统”的设计与实现(源码数据库文档PPT) 开发语言:Java 数据库:MySQL 技术:SpringBoot 工具:IDEA/Ecilpse、Navicat、Maven 系统展示 系统首页界面图 学生注册界面图 后台登录界面图 …

1.Python是什么?——《跟老吕学Python编程》

1.Python是什么?——《跟老吕学Python编程》 Python是一种什么样的语言?Python的优点Python的缺点 Python发展历史Python的起源Python版本发展史 Python的价值学Python可以做什么职业?Python可以做什么应用? Python是一种什么样的…