cv2.threshold利用OSTU方法分割图像的前景和背景

OSTU方法,又称大津法或最大类间方差法,是一种在图像处理中广泛应用的自动阈值选择方法。该方法由日本学者大津(Nobuyuki Otsu)于1979年提出,旨在通过最大化前景与背景之间的类间方差来自动确定一个最佳阈值,从而将图像分割成前景和背景两部分。

OSTU方法的核心思想是寻找一个阈值T,使得图像的前景(高灰度值区域)和背景(低灰度值区域)之间具有最大的类间方差。类间方差越大,说明前景和背景的区分度越高,分割效果越好。

具体来说,OSTU方法的步骤如下:

  1. 计算图像的直方图:首先,计算图像的灰度直方图,即统计每个灰度级出现的频次。这有助于了解图像的整体灰度分布。
  2. 初始化变量:然后,初始化两个类(前景和背景),以及相关的变量,如权重(像素数量占总像素的比例)、均值和方差等。
  3. 迭代计算类间方差:接下来,通过迭代的方式,尝试不同的阈值T,并计算每个阈值下的类间方差。在每次迭代中,根据当前阈值T将像素分为前景和背景两类,并更新两类的权重、均值和方差。然后,计算当前阈值下的类间方差。
  4. 确定最佳阈值:最后,选择使类间方差最大的阈值T作为最佳阈值。这个阈值将用于将图像分割成前景和背景两部分。

OSTU方法具有自适应性强、分割效果好的优点,特别适用于目标单一的图像分割。然而,对于多目标图像或灰度分布不均匀的图像,OSTU方法可能无法获得理想的分割效果。在这种情况下,可以考虑使用其他更复杂的分割方法或结合其他预处理步骤来改善分割效果。

示例代码:

def ostu(img, save, name):# 读入图像,转换为灰度image = cv2.imread(img, 0)# 高斯滤波blurred = cv2.GaussianBlur(image, (5, 5), 0)# 使用ostu自动计算阈值并分割_, binary = cv2.threshold(blurred, 0, 255, cv2.THRESH_BINARY + cv2.THRESH_OTSU)# 形态学后处理,可选,可以使用开,闭等操作连接区域和消除噪声# kernel = np.ones((5, 5), np.uint8)# closed = cv2.morphologyEx(binary, cv2.MORPH_CLOSE, kernel)# opened = cv2.morphologyEx(closed, cv2.MORPH_OPEN, kernel)opened = binary# 找到二值图的轮廓contours, _ = cv2.findContours(opened, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)# 在原图上画出轮廓out = cv2.cvtColor(image, cv2.COLOR_GRAY2BGR)cv2.drawContours(out, contours, -1, (0, 0, 255), 1)cv2.imshow('binary', binary)cv2.imshow('out', out)cv2.waitKey()cv2.destroyAllWindows()

前景和背景的分割结果:

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

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

相关文章

Perforce《2024游戏技术现状报告》Part2:游戏引擎、版本控制、IDE及项目管理等多种开发工具的应用分析

游戏开发者一直处于创新前沿。他们的实践、工具和技术受到各行各业的广泛关注,正在改变着组织进行数字创作的方式。 近期,Perforce发布了《2024游戏技术现状报告》,通过收集来自游戏、媒体与娱乐、汽车和制造业等高增长行业的从业者、管理人…

编写虚拟的GPIO控制器的驱动程序:和pinctrl的交互使用

往期内容 本专栏往期内容: Pinctrl子系统和其主要结构体引入Pinctrl子系统pinctrl_desc结构体进一步介绍Pinctrl子系统中client端设备树相关数据结构介绍和解析inctrl子系统中Pincontroller构造过程驱动分析:imx_pinctrl_soc_info结构体Pinctrl子系统中c…

数据结构代码题--排序算法(快排),二叉树的基本知识,链表的基本操作引申

排序算法: 完成比完美更重要! 题目中常考的是平均时间复杂度:但是具体计算时,能用最坏就用最坏 插入:直接插,希尔 交换:冒泡,快排 选择:简单选择,堆排 归…

外包干了4年,技术退步太明显了。。。。。

先说一下自己的情况,本科生生,20年通过校招进入武汉某软件公司,干了差不多4年的功能测试,今年国庆,感觉自己不能够在这样下去了,长时间呆在一个舒适的环境会让一个人堕落!而我已经在一个企业干了四年的功能…

VS2013安装报错“windows程序兼容性模式已打开,请将其关闭 ”解决方案

windows程序兼容性模式已打开,请将其关闭 在安装VS2013语言包的时候报错:windows程序兼容性模式已打开,请将其关闭 还会经常遇到这个错误:有一个安装程序已经运行 第一个问题解决办法: 按winr,输入cmd 输入 安装包路径 /Uninstal…

fastapi_socketio连接vue的socktio.client

环境 windows 11 python 3.11 fastapi 0.108.0 fastapi-socketio 0.0.10 vue2 “socket.io-client”: “^4.6.1”, 提示:如果遇到跨域问题自行解决 fastapi 使用fastapi-scoketio下的SocketManager, 可以看到接口解释如下: 所以默认配置是客户端连接时…

使用 GitHub Actions 部署到开发服务器的详细指南

使用 GitHub Actions 部署到开发服务器的详细指南 在本篇博客中,我们将介绍如何使用 GitHub Actions 实现自动化部署,将代码从 GitHub 仓库的 dev 分支自动部署到开发服务器。通过这种方式,可以确保每次在 dev 分支推送代码时,服…

常见 HTTP 状态码分类和解释及服务端向前端返回响应时的最完整格式

目前的开发项目,准备明年的国产化,用了十年的自研系统借这个机会全部重写,订立更严格的规范,这里把返回格式及对应状态码记录一下。 常见 HTTP 状态码及解释 HTTP 状态码用于表示客户端请求的响应状态,它们分为五类&a…

使用PyCharm连接虚拟机运行spark任务,本地开发:远程提交测试

在本地写代码,右键运行,将代码自动提交到集群上 spark是Standalone集群 1) 集群环境准备好 #启动集群:第一台机器 start-dfs.sh cd /opt/installs/spark sbin/start-master.sh sbin/start-workers.sh sbin/start-history-server.sh 2) Wi…

XHCI 1.2b 规范摘要(12)

系列文章目录 XHCI 1.2b 规范摘要(一) XHCI 1.2b 规范摘要(二) XHCI 1.2b 规范摘要(三) XHCI 1.2b 规范摘要(四) XHCI 1.2b 规范摘要(五) XHCI 1.2b 规范摘要…

多分类logistic回归分析案例教程

因变量为无序多分类变量,比如研究成人早餐选择的相关因素,早餐种类包括谷物类、燕麦类、复合类,此时因变量有三种结局,而且三种早餐是平等的没有顺序或等级属性,此类回归问题,可以使用多分类Logistic回归进…

读取数量不定的输入数据

#include <iostream> using namespace std; int main() {int sum 0, value 0;//读取数据直到遇到文件尾while (cin >> value) {sum value;}cout << sum;return 0; }

Kubernetes的基本构建块和最小可调度单元pod-0

文章目录 一&#xff0c;什么是pod1.1pod在k8s中使用方法&#xff08;1&#xff09;使用方法一&#xff08;2&#xff09;使用方法二 1.2pod中容器的进程1.3pod的网络隔离管理&#xff08;1&#xff09;pause容器的作用 1.4 Pod分类&#xff1a;&#xff08;1&#xff09;自主式…

unity3d————四元数概念

一、定义与表示 四元数是由一个实数部分和三个虚数部分组成&#xff0c;通常表示为q w xi yj zk&#xff0c;其中w是实数&#xff0c;x、y、z是实数系数&#xff0c;i、j、k是虚数单位&#xff0c;满足以下关系&#xff1a; i j k -1ij k&#xff0c;ji -kjk i&…

利用frp进行SSH端口转发(内网穿透同理)

题记 公司内网有一台设备&#xff0c;可以根据微步情报来对恶意服务器进行封禁。很不幸我的vps因为开着cs被标记为恶意了&#xff0c;导致我在公司网络连不上我的vps&#xff0c;每次连还要挂代理。于是我打算将我vps的22端口转发到我们公司的vps的10022端口上。本篇文章来自11…

深度学习:bert框架

bert框架的介绍 BERT是一个基于Transformer的双向编码器表示模型&#xff0c;它通过预训练学习到了丰富的语言表示&#xff0c;并可以用于各种自然语言处理任务。 模型结构&#xff1a; BERT基于Transformer的编码器部分&#xff0c;采用了多层自注意力机制和前馈神经网络。这…

java ssm 防疫用地理位置分析系统 地理坐标系统 定位 源码 jsp

一、项目简介 本项目是一套基于SSM的防疫用地理位置分析系统&#xff0c;主要针对计算机相关专业的和需要项目实战练习的Java学习者。 包含&#xff1a;项目源码、数据库脚本、软件工具等。 项目都经过严格调试&#xff0c;确保可以运行&#xff01; 二、技术实现 ​后端技术&…

IDEA启动提示Downloading pre-built shared indexes

Download pre-built shared indexes Reduce the indexing time and CPU load with pre-built JDK shared indexes 翻译&#xff1a; 下载预构建的共享索引 使用预构建的JDK共享索引减少索引时间和CPU负载. 使用预构建的JDK共享索引可以显著减少索引构建时间和CPU负载&#xf…

【1个月速成Java】基于Android平台开发个人记账app学习日记——第7天,申请阿里云SMS短信服务SDK

系列专栏链接如下&#xff0c;方便跟进&#xff1a; https://blog.csdn.net/weixin_62588253/category_12821860.html?fromshareblogcolumn&sharetypeblogcolumn&sharerId12821860&sharereferPC&sharesourceweixin_62588253&sharefromfrom_link 同时篇幅…

MySQL8完全卸载方法-Win10系统

今天分享一篇win10系统下&#xff0c;如何完整的卸载MySQL8 第一步&#xff1a;关闭服务 services.msc 随后右键&#xff0c;点击“停止”&#xff0c;这时候通过cmd命令窗口进入MySQL&#xff0c;检测是否关闭成功 mysql -u root -p 如果提示&#xff1a;ERROR 2003(HY000) ca…