当前位置: 首页 > news >正文

灰度化、二值化、边缘检测、轮廓检测

灰度化

定义

灰度图像是只含亮度信息,不含色彩信息的图像。灰度化处理是把彩色图像转换为灰度图像的过程,是图像处理中的基本操作。OpenCV 中彩色图像使用 BGR 格式。灰度图像中用 8bit 数字 0~255 表示灰度,如:0 表示纯黑,255 表示纯白。

函数讲解

  1. 使用 cvtColor 函数将图像转换为灰度图像:
import cv2
img = cv2.imread('image.jpg')
gray_img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
cv2.imshow('Gray Image', gray_img)
cv2.waitKey(0)
cv2.destroyAllWindows()
  1. 使用 cv2.imread 函数读取图像,并使用 cv2.cvtColor 函数将图像转换为灰度图像:
import cv2
img = cv2.imread('image.jpg', cv2.IMREAD_GRAYSCALE)
cv2.imshow('Gray Image', img)
cv2.waitKey(0)
cv2.destroyAllWindows()

二值化

定义

图像的二值化,就是将图像上的像素点的灰度值设置为0或255,也就是将整个图像呈现出明显的只有黑和白的视觉效果。
常用的方法就是设定一个阈值T,用T将图像的数据分成两部分:大于T的像素群和小于T的像素群。其实图像二值化的方法有不下二十种。一般分为Global和Local两类,区别就是寻找那个阈值的时候使用到了哪里的信息。

但是单一的图像二值化方法(指基于直方图的二值化)往往比不过其他的方法,因为,毕竟你信息丢了太多。但是二值化快啊……你可以进行一百次不同的二值化,然后再得到一个更好的结果……

全局阈值法

简单阈值是选取一个全局阈值,然后把整幅图像分成非黑即白的二值图像,灰度值大于阈值就赋为255反之为0。

特点:对整幅图像都是用一个统一的阈值来进行二值化,方法简单易于实现。但是对光照不均匀的图像容易出现错误的二值分割。

cv::threshold(graySrc,dst, threshold_value, threshold_max,THRESH_BINARY);

自适应阈值法

自适应阈值法的原理就是将像素点与该点所在区域的像素的平均值(最大值、中位数等)做比较,大于则赋予255;反之,为0。

特点:在同一幅图像上的不同区域采用的是不同的阈值,从而使我们能在亮度不同的情况下得到更好的结果。

cv.adaptiveThreshold(src,dst,maxValue,adaptiveMethod,blockvalue,C)
  • src表示需要进行二值化的图像;需要注意的是,该输入必须是8-bit单通道的图像;
  • dst表示输出图像的二值图像;
  • maxValue是一个非零值,用于对哪些满足条件的阈值进行赋值;
  • adaptiveMethod表示选择哪一种自适应阈值算法;Opencv提供两种,ADAPTIVE_THRESH_MEAN_C(领域内均值)与ADAPTIVE_THRESH_GAUSSIAN_C(领域内像素点加权和)
  • blockvalue表示设定方阵的大小,将一个点与其周围的方阵数据对比,合适的方阵大小对于结果的影像较大。
  • 常数,每个区域计算出的阈值的基础上在减去这个常数作为这个区域的最终阈值,可以为负数。

原文链接:https://blog.csdn.net/weixin_51775350/article/details/128175134

OTSU二值化(最大类间方差法)

Otsu算法(大津法或最大类间方差法)使用的是聚类的思想,把图像的灰度数按灰度级分成2个部分,使得两个部分之间的灰度值差异最大,每个部分之间的灰度差异最小,(相当于类间保持差异性,类内保持一致性)通过方差的计算来寻找一个合适的灰度级别来划分。 所以可以在二值化的时候采用otsu算法来自动选取阈值进行二值化。otsu算法被认为是图像分割中阈值选取的最佳算法,计算简单,不受图像亮度和对比度的影响。因此,使类间方差最大的分割意味着错分概率最小。

大津算法的核心思想是通过寻找一个阈值,将图像的像素分为两个类别:前景和背景。具体步骤如下:

  • 统计图像的灰度直方图,得到每个灰度级的像素数目。
  • 遍历所有可能的阈值(0到255),计算根据该阈值将图像分为前景和背景的类内方差。
  • 根据类内方差的最小值确定最佳阈值。

特点:类间方差法对噪音和目标大小十分敏感,它仅对类间方差为单峰的图像产生较好的分割效果。当目标与背景的大小比例悬殊时,类间方差准则函数可能呈现双峰或多峰,此时效果不好,但是类间方差法是用时最少的。

cv::threshold(gray, img_Thr_O, 0, 255, cv::THRESH_BINARY | cv::THRESH_OTSU); 
// *第一个参数:待二值化的图像,图像只能是CV_8U和CV_32F两种类型。对于
// 图像通道数目的要求与选择二值化的方法有关。
// *第二个参数:二值化后的图像
// *第三个参数:二值化阈值
// *第四个参数:二值化过程的最大值,它只在THRESH_BINARY和THRESH_BINARY_INV
// 两种方法中才使用。

方差(Variance)是用来衡量一组数据离其平均值的分散程度的统计量。这组数据的每个数值与其平均值之间的差的平方的平均值就是这组数据的方差。数学上的定义如下:
设有一组数据X={x1, x2, …, xn},其中n是数据量,其平均值为μ,那么方差σ2的计算公式为:σ2 = (1/n) * Σ(xi - μ)^2 , Σ代表所有数据的累加。

方差的计算描述了数据数值与其平均值之间的差异性,方差越大,数据的分散程度越大,反之则数据更集中。

边缘检测

定义

边缘检测是图像处理中非常重要的一项任务,它的目标是找到图像中亮度变化明显的区域,这些区域通常对应物理世界中的物体边缘。边缘检测常用于图像分割和特征提取。

轮廓检测

定义

轮廓可以简单认为成将连续的点(连着边界)连在一起的曲线,具有相同的颜色或灰度,提取轮廓就是提取这些具有相同颜色或者灰度的曲线,或者说是连通域,轮廓在形状分析和物体检测和识别中非常有用。

函数讲解

cv2.findContours() 是一个在OpenCV库中的函数,它用于从二值图像中检测轮廓。
函数的定义如下:

参数说明:
cv2.findContours(image, mode, method[, contours[, hierarchy[, offset]]])
  • image: 必须是8位单通道二值图像。在运行此函数后,原图像将被修改。注意通常需要使用阈值处理或边缘检测之后的结果图像。
  • mode: 此参数定义了轮廓检测模式。例如,cv2.RETR_TREE会检测所有轮廓并创建完整的轮廓层级系列。 cv2.RETR_EXTERNAL则只检测最外面的轮廓。
  • method: 此参数定义了轮廓的近似方法。例如,cv2.CHAIN_APPROX_SIMPLE将存储轮廓线段的结束点,而cv2.CHAIN_APPROX_NONE则存储轮廓上的所有点。

函数返回值:

  • contours: 这是一个Python列表,其中存储了图像中所有轮廓。每一条轮廓都是一个包含轮廓上各点(x, y)坐标的NumPy数组。
  • hierarchy: (仅当mode参数为cv2.RETR_CCOMP或cv2.RETR_TREE时存在) 它是一个包含有关图像拓扑信息的NumPy数组。

例子代码

以下python代码会找到并画出图像中的所有外部轮廓:

import cv2
import numpy as np# 加载图像
image = cv2.imread('image.png', cv2.IMREAD_GRAYSCALE)# 二值化图像
_, thresholded = cv2.threshold(image, 127, 255, cv2.THRESH_BINARY)# 寻找轮廓
contours, _ = cv2.findContours(thresholded, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)# 在原图上画出轮廓
cv2.drawContours(image, contours, -1, (0,255,0), 3)cv2.imshow("Contours", image)
cv2.waitKey(0)
cv2.destroyAllWindows()

相关文章:

灰度化、二值化、边缘检测、轮廓检测

灰度化 定义 灰度图像是只含亮度信息,不含色彩信息的图像。灰度化处理是把彩色图像转换为灰度图像的过程,是图像处理中的基本操作。OpenCV 中彩色图像使用 BGR 格式。灰度图像中用 8bit 数字 0~255 表示灰度,如:0 表…...

基于JAVA的高校大学生创业管理系统 开源项目

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 系统公告模块2.2 创业项目模块2.3 创业社团模块2.4 政府政策模块2.5 创业比赛模块 三、系统设计3.1 用例设计3.2 数据库设计3.2.1 系统公告表3.2.2 创业项目表3.2.3 创业社团表3.2.4 政策表 四、系统展示五、核心代码5.…...

神经网络学习小记录76——Tensorflow2设置随机种子Seed来保证训练结果唯一

神经网络学习小记录76——Tensorflow2设置随机种子Seed来保证训练结果唯一 学习前言为什么每次训练结果不同什么是随机种子训练中设置随机种子 学习前言 好多同学每次训练结果不同,最大的指标可能会差到3-4%这样,这是因为随机种子没有设定导致的&#x…...

ai学习笔记-入门

目录 一、人工智能是什么?可以做什么? 人工智能(Artificial Intelligence): 人工智能的技术发展路线: 产业发展驱动因素:数据、算力、算法 二、人工智能这个工具的使用原理入门 神经网络⭕数学基础 1.神经网络的生物表示 …...

workflow系列教程(5-1)HTTP Server

往期教程 如果觉得写的可以,请给一个点赞关注支持一下 观看之前请先看,往期的博客教程,否则这篇博客没办法看懂 workFlow c异步网络库编译教程与简介 C异步网络库workflow入门教程(1)HTTP任务 C异步网络库workflow系列教程(2)redis任务 workflow系列教程(3)Series串联任务流…...

php-使用wangeditor实现富文本(完成图片上传)-npm

官网参考连接:快速开始 | wangEditor 样式: 一、新建一个临时文件夹test1和一个文件夹wangeditor 临时文件夹test1:临时存放通过npm下载的文件文件夹wangeditor:用于存放在临时文件夹test1拷贝的css和js 二、安装 editor 在确保有…...

mysql查看数据库中所有的表的建表语句

mysql查看数据库中所有的表: SHOW TABLES; 这条命令将返回数据库中所有表的列表。 如果要查看单个表的建表语句,可以使用以下命令: SHOW CREATE TABLE table_name; 其中,"table_name"为你要查看的表的名称。 如果…...

【Axure RP9】实现登入效验及实现左侧菜单栏跳转各页面

目录 一 效验简介 1.1 校验好处 1.2 应用场景 二 登入校验 2.1 效果 2.2 实现流程 三 左边菜单栏左侧菜单栏跳转各页面 3.1 效果 3.2 实现图 一 效验简介 1.1 校验好处 提高安全性: 在传统的用户名和密码登录的基础上,引入了另一种或多种验证…...

76. 最小覆盖子串。优化官方题解!

leetcode原题如下: 给你一个字符串 s 、一个字符串 t 。返回 s 中涵盖 t 所有字符的最小子串。如果 s 中不存在涵盖 t 所有字符的子串,则返回空字符串 "" 。 注意: 对于 t 中重复字符,我们寻找的子字符串中该字符数量…...

在国产GPU寒武纪MLU上快速上手Pytorch使用指南

本文旨在帮助Pytorch使用者快速上手使用寒武纪MLU。以代码块为主,文字尽可能简洁,许多部分对标NVIDIA CUDA。不正确的地方请留言更正。本文不定期更新。 文章目录 前言Cambricon PyTorch的Python包torch_mlu导入将模型加载到MLU上model.to(mlu)定义损失函…...

重生奇迹MU觉醒战士攻略

剑士连招技巧:生命之光:PK前起手式,增加血上限。 雷霆裂闪:眩晕住对手,剑士PK战士第一技能,雷霆裂闪是否使用好关系到胜负。 霹雳回旋斩:雷霆裂闪后可以选择用霹雳回旋斩跑出一定范围(因为对手…...

美颜技术详解:深入了解视频美颜SDK的工作机制

本文将深入探讨视频美颜SDK的工作机制,揭示其背后的科技奥秘和算法原理。 1.引言 视频美颜SDK作为一种集成到应用程序中的技术工具,通过先进的算法和图像处理技术,为用户提供令人印象深刻的实时美颜效果。 2.视频美颜SDK的基本工作原理 首…...

3D模型格式转换工具如何实现高性能数据转换?请看CAE系统开发实例!

​ 客户背景 DP Technology是全球知名的CAM的供应商,在全球8个国家设有18个办事处。DP Technology提供的CAMESPRIT系统是一个用于数控编程,优化和仿真全方面的CAM系统。CAMESPRIT的客户来自多个行业,因此支持多种CAD工具和文件格式显得格外重…...

多级缓存:亿级流量的缓存方案

文章目录 一.多级缓存的引入二.JVM进程缓存三.Lua语法入门四.多级缓存1.OpenResty2.查询Tomcat3.Redis缓存预热4.查询Redis缓存5.Nginx本地缓存6.缓存同步 一.多级缓存的引入 传统缓存的问题 传统的缓存策略一般是请求到达Tomcat后,先查询Redis,如果未…...

C语言——高精度乘法

一、引子 高精度乘法相较于高精度加法和减法有更多的不同,加法和减法是一位对应一位进行操作的,而乘法是一个数的每一位对另一个数的每一位进行操作,需要的计算步骤更多。 二、核心算法 void Calculate(int num1[], int num2[], int numres…...

为什么C语言没有被C++所取代呢?

今日话题,为什么C语言没有被C所取代呢?虽然C是一个功能更强大的语言,但C语言在嵌入式领域仍然广泛使用,因为它更轻量级、更具可移植性,并且更适合在资源受限的环境中工作。这就是为什么C语言没有被C所取代的原因。如果…...

基于Spring的枚举类+策略模式设计(以实现多种第三方支付功能为例)

摘要 最近阅读《贯彻设计模式》这本书,里面使用一个更真实的项目来介绍设计模式的使用,相较于其它那些只会以披萨、厨师为例的设计模式书籍是有些进步。但这书有时候为了使用设计模式而强行朝着对应的 UML 图来设计类结构,并且对设计理念缺少…...

基于Linphone android sdk开发Android软话机

1.Linphone简介 1.1 简介 LinPhone是一个遵循GPL协议的开源网络电话或者IP语音电话(VOIP)系统,其主要如下。使用linphone,开发者可以在互联网上随意的通信,包括语音、视频、即时文本消息。linphone使用SIP协议&#…...

[论文分享]TimeDRL:多元时间序列的解纠缠表示学习

论文题目:TimeDRL: Disentangled Representation Learning for Multivariate Time-Series 论文地址:https://arxiv.org/abs/2312.04142 代码地址:暂无 关键要点:多元时间序列,自监督表征学习,分类和预测 摘…...

分享一个好看的vs主题

最近发现了一个很好看的vs主题(个人认为挺好看的),想要分享给大家。 主题的名字叫NightOwl,和vscode的主题颜色挺像的。操作方法也十分简单,首先我们先在最上面哪一行找到扩展。 然后点击管理扩展,再搜索栏…...

什么是云呼叫中心?

云呼叫中心作为一种高效的企业呼叫管理方案,越来越受到企业的青睐,常被用于管理客服和销售业务。那么,云呼叫中心到底是什么? 什么是云呼叫中心? 云呼叫中心是一种基于互联网的呼叫管理系统,与传统的呼叫…...

还在用nvm?来试试更快的node版本管理工具——fnm

前言 📫 大家好,我是南木元元,热衷分享有趣实用的文章,希望大家多多支持,一起进步! 🍅 个人主页:南木元元 目录 什么是node版本管理 常见的node版本管理工具 fnm是什么 安装fnm …...

【Hadoop精讲】HDFS详解

目录 理论知识点 角色功能 元数据持久化 安全模式 SecondaryNameNode(SNN) 副本放置策略 HDFS写流程 HDFS读流程 HA高可用 CPA原则 Paxos算法 HA解决方案 HDFS-Fedration解决方案(联邦机制) 理论知识点 角色功能 元数据持久化 另一台机器就…...

企业需要哪些数字化管理系统?

企业需要哪些数字化管理系统? ✅企业引进管理系统肯定是为了帮助整合和管理大量的数据,从而优化业务流程,提高工作效率和生产力。 ❌但是,如果各个系统之间不互通、无法互相关联数据的话,反而会增加工作量和时间成本…...

【vue】开发常见问题及解决方案

有一些问题不限于 Vue,还适应于其他类型的 SPA 项目。 1. 页面权限控制和登陆验证页面权限控制 页面权限控制是什么意思呢? 就是一个网站有不同的角色,比如管理员和普通用户,要求不同的角色能访问的页面是不一样的。如果一个页…...

飞天使-k8s知识点3-卸载yum 安装的k8s

要彻底卸载使用yum安装的 Kubernetes 集群,您可以按照以下步骤进行操作: 停止 Kubernetes 服务: sudo systemctl stop kubelet sudo systemctl stop docker 卸载 Kubernetes 组件: sudo yum remove -y kubelet kubeadm kubectl…...

ZooKeeper 集群搭建

文章目录 ZooKeeper 概述选举机制搭建前准备分布式配置分布式安装解压缩并重命名配置环境配置服务器编号配置文件 操作集群编写脚本运行脚本搭建过程中常见错误 ZooKeeper 概述 Zookeeper 是一个开源的分布式服务协调框架,由Apache软件基金会开发和维护。以下是对Z…...

Meson:现代的构建系统

Meson是一款现代化、高性能的开源构建系统,旨在提供简单、快速和可读性强的构建脚本。Meson被设计为跨平台的,支持多种编程语言,包括C、C、Fortran、Python等。其目标是替代传统的构建工具,如Autotools和CMake,提供更简…...

【大模型AIGC系列课程 5-2】视觉-语言大模型原理

重磅推荐专栏: 《大模型AIGC》;《课程大纲》 本专栏致力于探索和讨论当今最前沿的技术趋势和应用领域,包括但不限于ChatGPT和Stable Diffusion等。我们将深入研究大型模型的开发和应用,以及与之相关的人工智能生成内容(AIGC)技术。通过深入的技术解析和实践经验分享,旨在…...

震惊!难怪别人家的孩子越来越聪明,原来竟是因为它

前段时间工作调动给孩子换了个新学校,刚开始担心她不能适应新学校的授课方式,但任课老师对她评价很高,夸她上课很专注。 为了训练孩子的专注力,作为家长可没少下功夫,画画,下五子棋等益智游戏的兴趣班没少…...

wordpress可以建站吗/杭州百度整站优化服务

原文链接:JoinColumn详解 原文标的也是转载,但是没有注明原文链接,看起来乱乱的,所以整理一下转载过来,顺便细看一下 1. 一对一 现假设有Person表和Address表,是一对一的关系,在Person中有一…...

南京企业做网站/营销100个引流方案

第二题生日蜡烛(结果填空)某君从某年开始每年都举办一次生日party,并且每次都要吹熄与年龄相同根数的蜡烛。现在算起来,他一共吹熄了236根蜡烛。请问,他从多少岁开始过生日party的?请填写他开始过生日party的年龄数。注意&#xf…...

安徽建设委员会网站/百度学术搜索

文章目录一、第一阶段:前三年二、第二阶段:第五年三、第三阶段:第十年总结如果你还没有自己清晰的职业规划,他的建议可以帮助你思考一下自己的将来。 程序员的职业未来分为三个阶段,每个阶段都会遇到一个区分门槛。 程…...

自己做网站stri/域名备案

procomm plus 的基本使用方法 1 串口脚本有些串口工具(例如串口调试助手)有定时发送功能,但只能发送一条固定的命令。我需要发送几百条命令,又懒得写程序,就希望找一个可以执行串口脚本的工具。然后我找到了procomm pl…...

wordpress首页自定义小工具/推广关键词排名方法

昨天晚上看了一部录像,具体名字我忘了,不过其中有句话记得非常清楚,“Who is the lion!”。故事讲述的是一个胆子很小的警察,无意中被要求付5000美金去学习一本课程,当然教授是一个比较坏的家伙,不过我也确…...

电子商务网站开发需要注意问题/百度收录提交

****文件操作命令**** ls #以默认方式显示文件列表 -a 显示所有文件 -l 显示文件属性 -lt 按照修改时间进行排序cd #切换路径 / 根目录 .. 上一级目录 ../.. 上二级目录 ~ 切换到用户目录cp #拷贝文件 cp /root/source 将root目录下的source文件复制到当前目录 cp source targe…...