OpenCV中阈值处理函数和二值化、反二值化的讲解及实战(附Python源码)

简介: OpenCV中阈值处理函数和二值化、反二值化的讲解及实战(附Python源码)

需要源码请点赞关注收藏后评论区留言私信~~~

阈值是图像处理中一个很重要的概念,类似一个“像素值的标准线”。所有像素值都与这条“标准线”进行比较,最后得到3种结果:像素值比阈值大、像素值比阈值小或像素值等于阈值。程序根据这些结果将所有像素进行分组,然后对某一组像素进行“加深”或“变淡”操作,使得整个图像的轮廓更加鲜明,更容易被计算机或肉眼识别。下面将对阈值的相关内容进行详细的介绍

一、阈值处理函数

在图像处理的过程中,阈值的使用使得图像的像素值更单一,进而使得图像的效果更简单,首先把一幅彩色图像转换为灰度图像,这样图像的像素值取值范围简化为0-255,然后通过阈值转换后的灰度图像呈现出只有纯黑色和纯白色的视觉效果

threshold方法用于对图像进行阈值处理,语法格式如下

retval,dst=cv2.threshold(src,thresh,maxval,type)

thresh 阈值 在125-150取值效果较好

maxval 阈值处理采用的最大值

type 阈值处理类型 常用类型和含义如下图所示

retval 处理时采用的阈值

dst 经过阈值处理后的图像

二、二值化

二值化处理和反二值化处理使得灰度图像的像素值两极分化,灰度图像呈现出只有纯黑色和纯白色的视觉效果

进行二值化处理时,每一个像素值都会与阈值进行比较,将大于阈值的像素值变为最大值,小于或者等于阈值的像素值变为0

二值化处理黑白渐变图如下

import cv2
img = cv2.imread("black.png", 0)  # 将图像读成灰度图像
t1, dst1 = cv2.threshold(img, 127, 255, cv2.THRESH_BINARY)  # 二值化阈值处理
cv2.imshow('img', img)  # 显示原图
cv2.imshow('dst1', dst1)  # 二值化阈值处理效果图
cv2.waitKey()  # 按下任何键盘按键后
cv2.destroyAllWindows()  # 释放所有窗体

通过修改阈值大小可以调整黑白交界的位置

import cv2
img = cv2.imread("black.png", 0)  # 将图像读成灰度图像
t1, dst1 = cv2.threshold(img, 127, 255, cv2.THRESH_BINARY)  # 二值化阈值处理
t2, dst2 = cv2.threshold(img, 210, 255, cv2.THRESH_BINARY)  # 调高阈值效果
cv2.imshow('dst1', dst1)  # 展示阈值为127时的效果
cv2.imshow('dst2', dst2)  # 展示阈值为210时的效果
cv2.waitKey()  # 按下任何键盘按键后
cv2.destroyAllWindows()  # 释放所有窗体

 

可见边界处有了明显的变化

下面我们观察不同最大值的处理效果

当将最大值调到150时表现为灰色而不是255的纯白色

 

import cv2
img = cv2.imread("black.png", 0)  # 将图像读成灰度图像
t1, dst1 = cv2.threshold(img, 127, 255, cv2.THRESH_BINARY)  # 二值化阈值处理
t3, dst3 = cv2.threshold(img, 127, 150, cv2.THRESH_BINARY)  # 调低最大值效果
cv2.imshow('dst1', dst1)  # 展示最大值为255时的效果
cv2.imshow('dst3', dst3)  # 展示最大值为15时的效果
cv2.waitKey()  # 按下任何键盘按键后
cv2.destroyAllWindows()  # 释放所有窗体

三、反二值化处理

其结果为二值化处理的相反结构,将大于阈值的像素值变为0,将小于或者等于阈值的像素值变为最大值

下面对图像进行反二值化处理

彩色图像经过反二值化处理后,因为各通道的颜色分量值不同,会呈现混乱的效果

import cv2
img = cv2.imread("black.png", 0)  # 将图像读成灰度图像
t1, dst1 = cv2.threshold(img, 127, 255, cv2.THRESH_BINARY)  # 二值化阈值处理
t4, dst4 = cv2.threshold(img, 127, 255, cv2.THRESH_BINARY_INV)  # 反二值化阈值处理
cv2.imshow('dst1', dst1)  # 展示二值化效果
cv2.imshow('dst4', dst4)  # 展示反二值化效果
cv2.waitKey()  # 按下任何键盘按键后
cv2.destroyAllWindows()  # 释放所有窗体

创作不易 觉得有帮助请点赞关注收藏~~~

相关文章
|
4天前
|
开发工具 Python
2024年Python最全使用Python求解方程_python解方程,2024年最新面试高分实战
2024年Python最全使用Python求解方程_python解方程,2024年最新面试高分实战
2024年Python最全使用Python求解方程_python解方程,2024年最新面试高分实战
|
2天前
|
机器学习/深度学习 算法 数据挖掘
4小时学完!15年技术大牛用247个实战案例剖析的Python教程
今天给小伙伴们分享一份15年技术大牛用247个实战案例剖析的Python教程,这份教程全程彩图讲解,告别枯燥!60秒学会⼀个⼩例⼦,带你系统学习Python,从⼊门到⼤师。 涵盖了Python基础、Python字符串和正则、Python⽂件和⽇期、Python三⼤利器、Python绘图、Python之坑、Python第三⽅包、机器学习和深度学必知算法、Python实战、Pandas数据分析案例实战十大篇幅的精品案例教程
|
4天前
|
数据采集 Java 数据挖掘
最新Python+OpenCV+dlib汽车驾驶员疲劳驾驶检测!,2024年最新网易云java面试
最新Python+OpenCV+dlib汽车驾驶员疲劳驾驶检测!,2024年最新网易云java面试
最新Python+OpenCV+dlib汽车驾驶员疲劳驾驶检测!,2024年最新网易云java面试
|
4天前
|
数据采集 数据挖掘 计算机视觉
最全OpenCV-Python实战(3)——OpenCV中绘制图形与文本,面试官必问问题及答案
最全OpenCV-Python实战(3)——OpenCV中绘制图形与文本,面试官必问问题及答案
|
4天前
|
Python
2024年最全用Python和PIL美化图像:文本覆盖技术实战,Python高级面试题pdf
2024年最全用Python和PIL美化图像:文本覆盖技术实战,Python高级面试题pdf
|
9天前
|
算法 Python 容器
Python编程 - 不调用相关choose库函数,“众数“挑选器、随机挑选器 的源码编程实现
Python编程 - 不调用相关choose库函数,“众数“挑选器、随机挑选器 的源码编程实现
43 0
|
9天前
|
存储 程序员 Shell
Python 进阶指南(编程轻松进阶):十、编写高效函数
Python 进阶指南(编程轻松进阶):十、编写高效函数
41 0
|
9天前
|
存储 Shell C++
零基础学会python编程——输入 / 输出函数与变量
零基础学会python编程——输入 / 输出函数与变量
98 0
|
Python
Python编程中类的属性获取、设置、判断是否存在等,实战hasattr和getattr函数的应用案例!
Python编程中类的属性获取、设置、判断是否存在等,实战hasattr和getattr函数的应用案例!
147 0
|
编解码 安全 Python
【Python编程】八、Python函数详解
【Python编程】八、Python函数详解
129 0
【Python编程】八、Python函数详解