009 OpenCV 二值化 threshold

一、环境

本文使用环境为:

  • 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 argparsemax_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 Invertedthreshold_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.hqwc.cn/news/212675.html

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

相关文章

腾讯云标准型S5服务器和s6有什么区别?性能哪个强?

腾讯云服务器CVM标准型S5和S6有什么区别?都是标准型云服务器,标准型S5是次新一代云服务器规格,标准型S6是最新一代的云服务器,S6实例的CPU处理器主频性能要高于S5实例,同CPU内存配置下的标准型S6实例要比S5实例性能更好…

设置定时自动请求测试_自动定时循环发送http_post请求---postman工作笔记001

其实就是创建接口文件夹的时候,有个monitor collection 用来监听接口执行情况,这里就可以设置 可以看到多久执行一次对吧,这里可以设置每几分钟执行一次,一共执行多少次等等 但是这里要说明一下,如果需要使用monitor功能,必须需要登录, 所以如果这里点击monitor collection…

Java架构师发展方向和历程

目录 1 导论2 架构师的三观培养3 架构师的遇到的困难4 架构师职责5 架构师之路6 架构师的发展方向7 应用领域架构师8 业务架构师9 系统架构师和企业架构师10 技术路线和演进规划11 一线大厂的技术生态拓张案例12 如何推进项目落地想学习架构师构建流程请跳转:Java架构师系统架…

细胞级浮游藻类智能检测系统

产品信息 新一代浮游藻类智能检测系统问世!英视江河首次将藻类检测精度提升到细胞级!英视江河致力于新一代浮游生物的识别、计数。特征是群体藻类和群体种个体均精准检测!目前设备已在山东、宁夏、内蒙多地实际应用。 郑州英视江河生态环境科…

技术短视频账号矩阵seo系统--源头开发---saas工具

专注短视频账号矩阵系统源头开发---saas营销化工具,目前我们作为一家纯技术开发团队目前已经专注打磨开发这套系统企业版/线下版两个版本的saas营销拓客工具已经3年了,本套系统逻辑主要是从ai智能批量剪辑、账号矩阵全托管发布、私信触单收录、文案ai智能…

ubuntu20.04安装多版本cuda,切换版本

1. 安装cuda toolkit: 下载网站 https://developer.nvidia.com/cuda-11.3.0-download-archive 选择版本,这里选择11.3 wget https://developer.download.nvidia.com/compute/cuda/11.3.0/local_installers/cuda_11.3.0_465.19.01_linux.run给cuda权限: chmod x…

【Docker】从零开始:9.Docker命令:Push推送仓库(Docker Hub,阿里云)

【Docker】从零开始:9.Docker命令:Push推送仓库 知识点1.Docker Push有什么作用?2.Docker仓库有哪几种2.1 公有仓库2.2 第三方仓库2.3 私有仓库2.4 搭建私有仓库的方法有哪几种 3.Docker公有仓库与私有仓库的优缺点对比 Docker Push 命令标准语法操作参数…

浅谈 Guava 中的 ImmutableMap.of 方法的坑

作者:明明如月学长, CSDN 博客专家,大厂高级 Java 工程师,《性能优化方法论》作者、《解锁大厂思维:剖析《阿里巴巴Java开发手册》》、《再学经典:《EffectiveJava》独家解析》专栏作者。 热门文章推荐&…

40、Flink 的Apache Kafka connector(kafka source 和sink 说明及使用示例) 完整版

Flink 系列文章 1、Flink 部署、概念介绍、source、transformation、sink使用示例、四大基石介绍和示例等系列综合文章链接 13、Flink 的table api与sql的基本概念、通用api介绍及入门示例 14、Flink 的table api与sql之数据类型: 内置数据类型以及它们的属性 15、Flink 的ta…

Python中match-case语法: 引领新的模式匹配时代

更多Python学习内容:ipengtao.com Python在其最新的版本中引入了match-case语法,这是一项强大的功能,为开发者提供了更加灵活和直观的模式匹配方式。本文将深入探讨match-case的各个方面,并通过丰富的示例代码,帮助大家…

【数据结构(C语言)】浅谈栈和队列

目录 文章目录 前言 一、栈 1.1 栈的概念及结构 1.2 栈的实现 1.2.1. 支持动态增长的栈的结构 1.2.2 初始化栈 1.2.3 入栈 1.2.4 出栈 1.2.5 获取栈顶元素 1.2.6 获取栈中有效元素个数 1.2.7 检查栈是否为空 1.2.8 销毁栈 二、队列 2.1 队列的概念及结构 2.2 队…

实用工具推荐 | 在线制作电子书

​随着互联网的发展,越来越多的人开始关注知识的传播和分享。而电子书作为一种方便携带、易于分享的形式,越来越受到人们的青睐。今天,就为大家推荐一款实用的工具——FLBOOK在线制作电子杂志平台,让你轻松在线制作电子书&#xf…