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

图像二值化方法及 Python OpenCV 实现

目录

一、引言

二、环境准备

三、代码实现及方法介绍

1. 阈值法

2. 反阈值法

3. 截断阈值法

4. 低阈值零处理

5. 超低阈值零处理

6. OTSU 阈值法

7. 自适应阈值法 - 均值阈值法

8. 自适应阈值法二值化 - 高斯核阈值法二值化

主函数调用

四、总结

一、引言

图像二值化是图像处理中一种基本且重要的操作,它将图像中的像素值转换为只有两种状态(通常是 0 和 255),使得图像只包含黑色和白色两种颜色,从而简化图像的分析和处理。在本文中,我们将介绍多种图像二值化方法,并使用 Python 和 OpenCV 库实现这些方法。

二、环境准备

在开始之前,确保你已经安装了 OpenCV 库。可以使用以下命令进行安装:

pip install opencv-python

三、代码实现及方法介绍

1. 阈值法

阈值法是最基本的二值化方法,它将图像中的每个像素值与一个设定的阈值进行比较,大于阈值的像素值设为 255,小于阈值的像素值设为 0。

import cv2#  阈值法:跟一个值比,大于这个值就是255,小于这个值就是0
def test001():img = cv2.imread("./opencv_work/src/monkey.jpg", cv2.IMREAD_GRAYSCALE)ret, binary = cv2.threshold(img, 127, 255, cv2.THRESH_BINARY)cv2.imshow("img", img)cv2.imshow("binary", binary)cv2.waitKey(0)cv2.destroyAllWindows()

2. 反阈值法

反阈值法与阈值法相反,大于阈值的像素值设为 0,小于阈值的像素值设为 255。

# 反阈值法:跟一个值比,大于这个值就是0,小于这个值就是255
def test002():img = cv2.imread("./opencv_work/src/monkey.jpg",cv2.IMREAD_GRAYSCALE)ret, bi = cv2.threshold(img, 127, 255, cv2.THRESH_BINARY_INV)cv2.imshow("img", img)cv2.imshow("bi", bi)cv2.waitKey(0)cv2.destroyAllWindows()

3. 截断阈值法

截断法将大于阈值的像素值截断为阈值,小于阈值的像素值保持不变。

# 截断法:大于这个值就变成这个值,小于这个值就保持不变
def test003():img = cv2.imread("./opencv_work/src/monkey.jpg", cv2.IMREAD_GRAYSCALE)ret, thresh = cv2.threshold(img, 127, 255, cv2.THRESH_TRUNC)cv2.imshow("img", img)cv2.imshow("thresh", thresh)cv2.waitKey(0)cv2.destroyAllWindows()

4. 低阈值零处理

低阈值法将大于阈值的像素值保持不变,小于阈值的像素值设为 0。

# 低阈值法:大于这个值就变成这个值,小于这个值就变成0
def test004():img = cv2.imread("./opencv_work/src/monkey.jpg", cv2.IMREAD_GRAYSCALE)ret, tozero=cv2.threshold(img,127,255,cv2.THRESH_TOZERO)cv2.imshow("img",img)cv2.imshow("tozero",tozero)cv2.waitKey(0)cv2.destroyAllWindows()

5. 超低阈值零处理

超低阈值法将大于阈值的像素值设为 0,小于阈值的像素值保持不变。

# 超低阈值法:大于这个值就变成0,小于这个值就保持不变
def test005():img = cv2.imread("./opencv_work/src/monkey.jpg", cv2.IMREAD_GRAYSCALE)ret, tozeroinv = cv2.threshold(img, 127, 255, cv2.THRESH_TOZERO_INV)cv2.imshow("img", img)cv2.imshow("tozeroinv", tozeroinv)cv2.waitKey(0)cv2.destroyAllWindows()

6. OTSU 阈值法

OTSU 阈值法是一种自动计算阈值的方法,它通过最大化类间方差来确定最佳阈值。

# OTSU阈值法:自动计算阈值
def test006():img = cv2.imread("./opencv_work/src/monkey.jpg", cv2.IMREAD_GRAYSCALE)ret, otsu = cv2.threshold(img, 0, 255, cv2.THRESH_BINARY + cv2.THRESH_OTSU)cv2.imshow("img", img)cv2.imshow("otsu", otsu)cv2.waitKey(0)cv2.destroyAllWindows()

7. 自适应阈值法 - 均值阈值法

均值阈值法根据周围像素的平均值来计算阈值,适用于光照不均匀的图像。

# 自适应阈值法-均值阈值法:根据周围像素的平均值来计算阈值
def test007():img = cv2.imread("./opencv_work/src/monkey.jpg", cv2.IMREAD_GRAYSCALE)adaptive = cv2.adaptiveThreshold(img, 255, cv2.ADAPTIVE_THRESH_MEAN_C, cv2.THRESH_BINARY, 11, 2)cv2.imshow("img", img)cv2.imshow("adaptive", adaptive)cv2.waitKey(0)cv2.destroyAllWindows()

8. 自适应阈值法二值化 - 高斯核阈值法二值化

高斯核阈值法根据周围像素的高斯加权和来计算阈值,相比于均值阈值法,它对噪声更具鲁棒性。

# 自适应阈值法二值化-高斯核阈值法二值化:根据周围像素的高斯加权和来计算阈值
def test008():img = cv2.imread("./opencv_work/src/monkey.jpg", cv2.IMREAD_GRAYSCALE)adaptive = cv2.adaptiveThreshold(img, 255, cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY, 11, 2)cv2.imshow("img", img)cv2.imshow("adaptive", adaptive)cv2.waitKey(0)cv2.destroyAllWindows()

主函数调用

if __name__ == '__main__':# test001()# test002()# test003()# test004()# test005()# test006()# test007()test008()

四、总结

本文介绍了多种图像二值化方法,并使用 Python 和 OpenCV 库实现了这些方法。不同的二值化方法适用于不同的场景,你可以根据具体需求选择合适的方法。在实际应用中,对于光照均匀的图像,简单的阈值法可能就足够了;而对于光照不均匀的图像,自适应阈值法可能会取得更好的效果。

希望本文对你理解图像二值化有所帮助!

http://www.lqws.cn/news/603793.html

相关文章:

  • 【分明集合】特征函数、关系与运算
  • 【1.6 漫画数据库设计实战 - 从零开始设计高性能数据库】
  • 【格与代数系统】格与哈斯图
  • Instruct-GPT中强化学习(RL)训练部分详解
  • 电机控制的一些笔记
  • uniapp选择相册
  • 【读代码】百度开源大模型:ERNIE项目解析
  • web开发,旅游景点管理系统推荐算法版本demo,基于asp.net,mvc,c#,sql server
  • 【算法】动态规划 斐波那契类型: 740. 删除并获得点数
  • [面试] 手写题-防抖,节流
  • Vue 安装使用教程
  • 小白成长之路-Mysql数据库基础(二)
  • uniapp内置蓝牙打印
  • jQuery UI 安装使用教程
  • Leetcode力扣解题记录--第49题(map)
  • 电源芯片之DCDC初探索ING
  • 数据结构:递归:组合数(Combination formula)
  • 深度学习常见的激活函数
  • 2025年7月最新英雄联盟战绩自动查询工具
  • [创业之路-458]:企业经营层 - 蓝海战略 - 重构价值曲线、整合产业要素、创造新需求
  • 技术学习_人工智能_1_神经网络是如何实现的?
  • 设计模式精讲 Day 22:模板方法模式(Template Method Pattern)
  • 在 Docker 容器中使用内网穿透
  • 论文阅读:BLIPv1 2022.2
  • 使用 StatsD 向 TDengine 写入
  • Python应用指南:利用高德地图API获取公交+地铁可达圈(三)
  • 黑马python(二十三)
  • 【王阳明代数集合代数基础】文化资本理论实体意气感知评定亲疏情感偏序集,实例《临江仙》讲解情感分析之数据结构的演变
  • LL面试题11
  • 【Python】numpy数组常用数据处理(测试代码+api例程)