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()  # 释放所有窗体

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

相关文章
|
7天前
|
机器学习/深度学习 IDE 开发工具
基于OpenCV的车牌识别系统源码分享
基于OpenCV的车牌识别系统主要利用图像边缘和车牌颜色定位车牌,再利用OpenCV的SVM识别具体字符,从而达到车牌识别的效果。
37 4
基于OpenCV的车牌识别系统源码分享
|
1月前
|
Ubuntu 计算机视觉 C++
Ubuntu系统下编译OpenCV4.8源码
通过上述步骤,你可以在Ubuntu系统上成功编译并安装OpenCV 4.8。这种方法不仅使你能够定制OpenCV的功能,还可以优化性能以满足特定需求。确保按照每一步进行操作,以避免常见的编译问题。
80 43
|
1月前
|
Ubuntu 计算机视觉 C++
Ubuntu系统下编译OpenCV4.8源码
通过上述步骤,你可以在Ubuntu系统上成功编译并安装OpenCV 4.8。这种方法不仅使你能够定制OpenCV的功能,还可以优化性能以满足特定需求。确保按照每一步进行操作,以避免常见的编译问题。
71 30
|
28天前
|
XML 机器学习/深度学习 人工智能
使用 OpenCV 和 Python 轻松实现人脸检测
本文介绍如何使用OpenCV和Python实现人脸检测。首先,确保安装了OpenCV库并加载预训练的Haar特征模型。接着,通过读取图像或视频帧,将其转换为灰度图并使用`detectMultiScale`方法进行人脸检测。检测到的人脸用矩形框标出并显示。优化方法包括调整参数、多尺度检测及使用更先进模型。人脸检测是计算机视觉的基础技术,具有广泛应用前景。
61 10
|
1月前
|
Ubuntu 计算机视觉 C++
Ubuntu系统下编译OpenCV4.8源码
通过上述步骤,你可以在Ubuntu系统上成功编译并安装OpenCV 4.8。这种方法不仅使你能够定制OpenCV的功能,还可以优化性能以满足特定需求。确保按照每一步进行操作,以避免常见的编译问题。
37 12
|
3月前
|
JSON 开发工具 git
基于Python和pygame的植物大战僵尸游戏设计源码
本项目是基于Python和pygame开发的植物大战僵尸游戏,包含125个文件,如PNG图像、Python源码等,提供丰富的游戏开发学习素材。游戏设计源码可从提供的链接下载。关键词:Python游戏开发、pygame、植物大战僵尸、源码分享。
|
4月前
|
Ubuntu 编译器 计算机视觉
Ubuntu系统编译OpenCV4.8源码
【10月更文挑战第17天】只要三步即可搞定,第一步是下载指定版本的源码包;第二步是安装OpenCV4.8编译需要的编译器与第三方库支持;第三步就是编译OpenCV源码包生成安装文件并安装。
|
4月前
|
计算机视觉
Opencv学习笔记(三):图像二值化函数cv2.threshold函数详解
这篇文章详细介绍了OpenCV库中的图像二值化函数`cv2.threshold`,包括二值化的概念、常见的阈值类型、函数的参数说明以及通过代码实例展示了如何应用该函数进行图像二值化处理,并展示了运行结果。
943 0
Opencv学习笔记(三):图像二值化函数cv2.threshold函数详解
|
5月前
|
算法 计算机视觉
opencv图像形态学
图像形态学是一种基于数学形态学的图像处理技术,它主要用于分析和修改图像的形状和结构。
76 4
|
5月前
|
存储 计算机视觉
Opencv的基本操作(一)图像的读取显示存储及几何图形的绘制
本文介绍了使用OpenCV进行图像读取、显示和存储的基本操作,以及如何绘制直线、圆形、矩形和文本等几何图形的方法。
Opencv的基本操作(一)图像的读取显示存储及几何图形的绘制

热门文章

最新文章

推荐镜像

更多