009 OpenCV threshold

news2024/10/2 18:20:16

一、环境

本文使用环境为:

  • Windows10
  • Python 3.9.17
  • opencv-python 4.8.0.74

二、二值化算法

2.1、概述

在机器视觉应用中,OpenCV的二值化函数threshold具有不可忽视的作用。主要的功能是将一幅灰度图进行二值化处理,以此大幅降低图像的数据量,从而突显出目标的轮廓。

具体来说,函数threshold可以将图像上的像素根据阈值划分为两类:大于或等于阈值的像素值被赋为最大值(或最大灰度值),而小于阈值的像素值则被赋为最小值(或最小灰度值)。这样的操作对于后续的特征提取和图像分析极为重要。例如,我们可以通过设定不同的阈值来对图像进行不同程度的二值化处理,以适应不同的应用场景。

然而,虽然threshold函数在机器视觉应用中有着广泛的应用,但其也存在一些缺点。例如,它只能处理单通道的图像,即灰度图像,而不能直接处理彩色图像。此外,选择合适的阈值也是一项挑战,因为如果阈值选择不当,可能会导致图像信息的丢失或者噪声的增加。

总的来说,OpenCV中的二值化函数threshold在机器视觉应用中扮演着重要角色,能够有效地简化图像数据并突出目标特征。但同时我们也需要注意其存在的一些局限性,如仅支持灰度图像以及阈值选择的困难等。

2.2、函数API

OpenCV中的二值化函数threshold是一种将图像转换为二值图像的方法。它通过设置一个阈值,将图像中的像素值分为两类:大于阈值的像素值为255(白色),小于等于阈值的像素值为0(黑色)。这种方法常用于图像处理和计算机视觉任务中,如边缘检测、轮廓识别等。

函数原型:

cv2.threshold(src, thresh, maxval, type)

参数说明:

  • src:输入图像,通常为灰度图像。
  • thresh:阈值,用于将像素值分为两类。
  • maxval:最大值,当像素值大于阈值时,将其设置为此值。
  • type:阈值类型,有以下几种选择:
    • cv::THRESH_BINARY:二值化,大于阈值的像素值为255,小于等于阈值的像素值为0。
    • cv::THRESH_BINARY_INV:反向二值化,大于阈值的像素值为0,小于等于阈值的像素值为255。
    • cv::THRESH_TRUNC:截断,大于阈值的像素值保持不变,小于等于阈值的像素值设置为阈值。
    • cv::THRESH_TOZERO:零化,大于阈值的像素值保持不变,小于等于阈值的像素值设置为0。
    • cv::THRESH_TOZERO_INV:反向零化,大于阈值的像素值设置为0,小于等于阈值的像素值保持不变。

三、代码演示

代码演示5种二值算法效果,5中算法的区别这里再贴一次:

  • cv::THRESH_BINARY:二值化,大于阈值的像素值为255,小于等于阈值的像素值为0。
  • cv::THRESH_BINARY_INV:反向二值化,大于阈值的像素值为0,小于等于阈值的像素值为255。
  • cv::THRESH_TRUNC:截断,大于阈值的像素值保持不变,小于等于阈值的像素值设置为阈值。
  • cv::THRESH_TOZERO:零化,大于阈值的像素值保持不变,小于等于阈值的像素值设置为0。
  • cv::THRESH_TOZERO_INV:反向零化,大于阈值的像素值设置为0,小于等于阈值的像素值保持不变。
from __future__ import print_function
import cv2 as cv
import argparse

max_value = 255
max_type = 4
max_binary_value = 255
# 这里有5种二值化算法,在gui界面使用滑条选择
trackbar_type = 'Type: \n 0: Binary \n 1: Binary Inverted \n 2: Truncate \n 3: To Zero \n 4: To Zero Inverted'
trackbar_value = 'Value'
window_name = 'Threshold Demo'
# 二值化
def Threshold_Demo(val):
    #0: Binary
    #1: Binary Inverted
    #2: Threshold Truncated
    #3: Threshold to Zero
    #4: Threshold to Zero Inverted
    threshold_type = cv.getTrackbarPos(trackbar_type, window_name)
    threshold_value = cv.getTrackbarPos(trackbar_value, window_name)
    _, dst = cv.threshold(src_gray, threshold_value, max_binary_value, threshold_type )
    cv.imshow(window_name, dst)
parser = argparse.ArgumentParser(description='Code for Basic Thresholding Operations tutorial.')
parser.add_argument('--input', help='Path to input image.', default='data/stuff.jpg') # 读取图片
args = parser.parse_args()
src = cv.imread(cv.samples.findFile(args.input))
if src is None:
    print('Could not open or find the image: ', args.input)
    exit(0)
# 彩色图转灰度图
src_gray = cv.cvtColor(src, cv.COLOR_BGR2GRAY)
cv.namedWindow(window_name)
# 创建滑条
cv.createTrackbar(trackbar_type, window_name , 3, max_type, Threshold_Demo)
cv.createTrackbar(trackbar_value, window_name , 0, max_value, Threshold_Demo)
Threshold_Demo(0)
cv.waitKey()

    #0: Binary

    #1: Binary Inverted 

  #2: Threshold Truncated 

  #3: Threshold to Zero

    #4: Threshold to Zero Inverted

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

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

相关文章

webAPI serial——串口连称

重点 关闭正在读的串口 借鉴文章:webapi串口 async closeport() {this.$emit("changeSerialStatus", false);//这里要注意,一定要关闭读取this.status false;//取消后,done会变成true,会执行reader.releaseLock();this.reader.c…

ESP32 MicroPython 颜色及二维码识别⑫

ESP32 MicroPython 颜色及二维码识别⑫ 1、颜色识别2、二维码识别 1、颜色识别 使用AI颜色识别功能,可以实现颜色辨别、颜色追踪等应用。颜色识别模型内置有9种常见的颜色识别和一种颜色学习识别模式。他们分别是: ai.COLOR_RED 表示识别红色 ai.COLOR…

【C语言】深入解开指针(四)

🌈write in front :🔍个人主页 : 啊森要自信的主页 ✏️真正相信奇迹的家伙,本身和奇迹一样了不起啊! 欢迎大家关注🔍点赞👍收藏⭐️留言📝>希望看完我的文章对你有小小的帮助&am…

使用 PowerShell 创建共享目录

在 Windows 中,可以使用共享目录来将文件和文件夹共享给其他用户或计算机。共享目录可以通过网络访问,这使得它们非常适合用于文件共享、协作和远程访问。 要使用 PowerShell 创建共享目录,可以使用 New-SmbShare cmdlet。New-SmbShare cmdl…

【C++高阶(四)】红黑树深度剖析--手撕红黑树!

💓博主CSDN主页:杭电码农-NEO💓   ⏩专栏分类:C从入门到精通⏪   🚚代码仓库:NEO的学习日记🚚   🌹关注我🫵带你学习C   🔝🔝 红黑树 1. 前言2. 红黑树的概念以及性质3. 红黑…

图像分类原理

一、什么是图像分类(Image Classification) 图像分类任务是计算机视觉中的核心任务,其目标是根据图像信息中所反映的不同特征,把不同类别的图像区分开来。 二、图像分类任务的特点 对于人来说,完成上述的图像分类任务简直轻而易举&#xf…

Elasticsearch:FMA 风格的向量相似度计算

作者:Chris Hegarty 在 Lucene 9.7.0 中,我们添加了利用 SIMD 指令执行向量相似性计算的数据并行化的支持。 现在,我们通过使用融合乘加 (Fused Mulitply-Add - FMA) 进一步推动这一点。 什么是 FMA 乘法和加法是一种常见的运算,…

聚观早报 |快手Q3营收;拼多多杀入大模型;Redmi K70E开启预约

【聚观365】11月23日消息 快手Q3营收 拼多多杀入大模型 Redmi K70E开启预约 华为nova 12系列或下周发布 亚马逊启动“AI就绪”新计划 快手Q3营收 财报显示,快手第三季度营收279亿元,同比增长20.8%;期内盈利21.8亿元,去年同期…

梁培强:塑造下一代投资高手

在当前全球经济动荡和金融市场快速变化的背景下,梁培强的投资教育计划不仅仅是一套课程,它是对传统投资理念的深度挑战和革新。梁培强,拥有超过二十年金融行业经验的资深分析师,正在引领一场投资者教育的变革,旨在培养…

基于深度学习的文本分类

通过构建更复杂的深度学习模型可以提高分类的准确性,即分别基于TextCNN、TextRNN和TextRCNN三种算法实现中文文本分类。 项目地址:zz-zik/NLP-Application-and-Practice: 本项目将《自然语言处理与应用实战》原书中代码进行了实现,并在此基础…

Oracle的控制文件多路复用,控制文件备份,控制文件手工恢复

一.配置控制文件多路复用 1.查询Oracle的控制文件所在位置 SQL> select name from v$controlfile;NAME -------------------------------------------------------------------------------- /u01/app/oracle/oradata/orcl/control01.ctl /u01/app/oracle/fast_recovery_a…

SpringBoot集成七牛云OSS详细介绍

📑前言 本文主要SpringBoot集成七牛云OSS详细介绍的文章,如果有什么需要改进的地方还请大佬指出⛺️ 🎬作者简介:大家好,我是青衿🥇 ☁️博客首页:CSDN主页放风讲故事 🌄每日一句&a…

geemap学习笔记012:如何搜索Earth Engine Python脚本

前言 本节主要是介绍如何查询Earth Engine中已经集成好的Python脚本案例。 1 导入库 !pip install geemap #安装geemap库 import ee import geemap2 搜索Earth Engine Python脚本 很简单,只需要一行代码。 geemap.ee_search()使用方法 后记 大家如果有问题需…

进程间通信(管道/消息队列/共享内存/信号量)

目录 一、进程间通信介绍1.1 进程间通信的目的1.2 进程间通信的发展1.3 进程间通信的分类 二、管道2.1 什么是管道?2.2 匿名管道2.3 实现匿名管道通信的代码2.4 用fork来共享管道原理2.5 站在文件描述符角度-深度理解管道2.6 站在内核角度-管道本质2.7 管道读写的规…

2023 年 亚太赛 APMCM (C题)国际大学生数学建模挑战赛 |数学建模完整代码+建模过程全解全析

当大家面临着复杂的数学建模问题时,你是否曾经感到茫然无措?作为2022年美国大学生数学建模比赛的O奖得主,我为大家提供了一套优秀的解题思路,让你轻松应对各种难题。 问题一 为了分析中国新能源电动汽车发展的主要因素&#xf…

电线电缆行业生产管理怎么数字化?

行业介绍 随着市场环境的变化和现代生产管理理念的不断更新,电缆的生产模式也在发生转变,批量小,规格多,交期短的新型制造需求逐年上升,所以企业车间管理的重要性越发凸显,作为企业良性运营的关键&#xf…

MySQL--慢查询(一)

1. 查看慢查询日志是否开启 show variables like slow_query%; show variables like slow_query_log; 参数说明: 1、slow_query_log:这个参数设置为ON,可以捕获执行时间超过一定数值的SQL语句。 2、long_query_time:当SQL语句执行…

汇编-PUSHFD和POPFD标志寄存器值压栈和出栈

PUSHFD指令将32位EFLAGS寄存器内容压入堆栈, 而POPFD指令则将栈顶单元内容弹出到EFLAGS寄存器 格式:

【开源】基于Vue和SpringBoot的学校热点新闻推送系统

项目编号: S 047 ,文末获取源码。 \color{red}{项目编号:S047,文末获取源码。} 项目编号:S047,文末获取源码。 目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 新闻类型模块2.2 新闻档案模块2.3 新…

opencv- CLAHE 有限对比适应性直方图均衡化

CLAHE(Contrast Limited Adaptive Histogram Equalization)是一种对比度有限的自适应直方图均衡化技术,它能够提高图像的对比度而又避免过度增强噪声。 在OpenCV中,cv2.createCLAHE() 函数用于创建CLAHE对象,然后可以…