基于梵·高《向日葵》的 图像阈值处理专题(二值处理、反二值处理、截断处理、自适应处理及Otsu方法)【Python-Open_CV系列(六)】(下)

简介: 基于梵·高《向日葵》的 图像阈值处理专题(二值处理、反二值处理、截断处理、自适应处理及Otsu方法)【Python-Open_CV系列(六)】

🍹5.五种处理方式汇总

👇将以上五种阈值处理方式汇总对比其效果:

import cv2
image = cv2.imread(""sunflowers.jpg".jpg")
# 因为原图尺寸过大,不方便展示,所以先缩放一倍。
image = cv2.resize(image, None, fx=0.5, fy=0.5)
# 转化为灰度图像
image_Gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
print(image_Gray.shape)
# 二值化阈值处理
t1, dst1 = cv2.threshold(image_Gray, 127, 255, cv2.THRESH_BINARY)
# 反二值化阈值处理
t2, dst2 = cv2.threshold(image_Gray, 127, 255, cv2.THRESH_BINARY_INV)
# 低于阈值零处理
t3, dst3 = cv2.threshold(image_Gray, 127, 255, cv2.THRESH_TOZERO)
# 超出阈值零处理
t4, dst4 = cv2.threshold(image_Gray, 127, 255, cv2.THRESH_TOZERO_INV)
# 截断处理
t5, dst5 = cv2.threshold(image_Gray, 127, 255, cv2.THRESH_TRUNC)
# 分别显示经过5种阈值类型处理后的图像
cv2.imshow("BINARY", dst1)
cv2.imshow("BINARY_INV", dst2)
cv2.imshow("TOZERO", dst3)
cv2.imshow("TOZERO_INV", dst4)
cv2.imshow("TRUNC", dst5)
cv2.waitKey()
cv2.destroyAllWindows()

1.png

这五种阈值处理的方法,的处理出的图像轮廓多少还是会有些模糊不清,不利于程序做进一步的处理。使用自适应处理可以有效改善该问题。

🍹6. 自适应处理

 自适应处理是一种改进过的阈值处理技术,其阈值是对图像区域中的某一正方形区域内的所有色素值使用指定的算法而得到的,从而而对像素进行相应的处理。自适应处理本身不属于阈值处理方法,算是对阈值处理的改进,其使用过程中可以选择使用二值化处理或反二值化处理的处理方式。


OpenCV中,做自适应处理使用的是cv2.adaptiveThreshold方法,

该方法语法如下

adaptiveThreshold(src, maxValue, adaptiveMethod, thresholdType, blockSize, C, dst=None)


其中,

adaptiveMethod 是自适应阈值的计算方法,该方法有两种,


  • cv2.ADAPTIVE_THRESH_MEAN_C : 对一个正方形区域内的所有像素进行平均加权。
  • cv2.ADAPTIVE_THRESH_GAUSSIAN_C : 根据高斯函数按照像素与中心店的距离对一个正方形区域内的所有像素进行加权计算。


thresholdType 即阈值处理类型。可以是二值化处理(cv2.THRESH_BINARY)或反二值化处理(cv2.THRESH_BINARY_INY)。


blockSize 计算阈值算法中的正方形区域的边长大小。


C 常量 最终的阈值等于均值减去这个常量 或 加权值减去这个常量


dst 经过阈值处理后的图像。


下边分别使用两种阈值计算方法对图片进行自适应处理,两种方法得到的结果有一定的细微差异。

✨平均法 cv2.ADAPTIVE_THRESH_MEAN_C

import cv2
image = cv2.imread("sunflowers.jpg")
image_Gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
athdMEAM = cv2.adaptiveThreshold(image_Gray, 255, cv2.ADAPTIVE_THRESH_MEAN_C, cv2.THRESH_BINARY, 5, 3)
cv2.imshow("MEAN_C", athdMEAM)
cv2.waitKey()
cv2.destroyAllWindows()

1.png

✨高斯法 cv2.ADAPTIVE_THRESH_GAUSSIAN_C

import cv2
image = cv2.imread("sunflowers.jpg")
image_Gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
athdGAUS = cv2.adaptiveThreshold(image_Gray, 255, cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY, 5, 3)
cv2.imshow("GAUSSIAN_C", athdGAUS)
cv2.waitKey()
cv2.destroyAllWindows()

1.png

🍹7. Otsu方法

除了自适应处理外,Opencv还提供了Otsu方法来遍历所有可能的阈值,从而得出最合适的阈值。


Ostu方法不是独立的函数方法,其实现基于上边实现五种阈值处理的threshold() 方法,只是需要在其阈值处理类型参数type后方 续写上 + cv2.THRESH_OTSU 字样(非字符串)。


👇示例如下,依然操作向日葵:

import cv2
image = cv2.imread("sunflowers.jpg")
# 灰度处理
image_Gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
# t=127的二值化处理
t1, dst1 = cv2.threshold(image_Gray, 127, 255, cv2.THRESH_BINARY)
# OTSU的二值化处理
t2, dst2 = cv2.threshold(image_Gray, 0, 255, cv2.THRESH_BINARY + cv2.THRESH_OTSU)
# 打印最佳阈值
print(t2)
cv2.imshow("BINARY", dst1)
cv2.imshow("OTSU", dst2)  
cv2.waitKey() 
cv2.destroyAllWindows()  

程序执行结果如下:

image.png

👇程序执行效果如下,左图为阈值为127时的二值化处理结果,右图为阈值最佳时的二值化处理结果,此时阈值为147.0。可以看出,右图中的向日葵的轮廓明显要比左图相对更为清晰。

1.png

目录
相关文章
|
7天前
|
机器学习/深度学习 人工智能 算法
基于Python深度学习的【蘑菇识别】系统~卷积神经网络+TensorFlow+图像识别+人工智能
蘑菇识别系统,本系统使用Python作为主要开发语言,基于TensorFlow搭建卷积神经网络算法,并收集了9种常见的蘑菇种类数据集【"香菇(Agaricus)", "毒鹅膏菌(Amanita)", "牛肝菌(Boletus)", "网状菌(Cortinarius)", "毒镰孢(Entoloma)", "湿孢菌(Hygrocybe)", "乳菇(Lactarius)", "红菇(Russula)", "松茸(Suillus)"】 再使用通过搭建的算法模型对数据集进行训练得到一个识别精度较高的模型,然后保存为为本地h5格式文件。最后使用Django框架搭建了一个Web网页平台可视化操作界面,
49 11
基于Python深度学习的【蘑菇识别】系统~卷积神经网络+TensorFlow+图像识别+人工智能
|
11天前
|
JSON 数据可视化 API
Python 中调用 DeepSeek-R1 API的方法介绍,图文教程
本教程详细介绍了如何使用 Python 调用 DeepSeek 的 R1 大模型 API,适合编程新手。首先登录 DeepSeek 控制台获取 API Key,安装 Python 和 requests 库后,编写基础调用代码并运行。文末包含常见问题解答和更简单的可视化调用方法,建议收藏备用。 原文链接:[如何使用 Python 调用 DeepSeek-R1 API?](https://apifox.com/apiskills/how-to-call-the-deepseek-r1-api-using-python/)
|
26天前
|
数据挖掘 数据处理 开发者
Python3 自定义排序详解:方法与示例
Python的排序功能强大且灵活,主要通过`sorted()`函数和列表的`sort()`方法实现。两者均支持`key`参数自定义排序规则。本文详细介绍了基础排序、按字符串长度或元组元素排序、降序排序、多条件排序及使用`lambda`表达式和`functools.cmp_to_key`进行复杂排序。通过示例展示了如何对简单数据类型、字典、类对象及复杂数据结构(如列车信息)进行排序。掌握这些技巧可以显著提升数据处理能力,为编程提供更强大的支持。
32 10
|
27天前
|
人工智能 自然语言处理 算法
随机的暴力美学蒙特卡洛方法 | python小知识
蒙特卡洛方法是一种基于随机采样的计算算法,广泛应用于物理学、金融、工程等领域。它通过重复随机采样来解决复杂问题,尤其适用于难以用解析方法求解的情况。该方法起源于二战期间的曼哈顿计划,由斯坦尼斯拉夫·乌拉姆等人提出。核心思想是通过大量随机样本来近似真实结果,如估算π值的经典示例。蒙特卡洛树搜索(MCTS)是其高级应用,常用于游戏AI和决策优化。Python中可通过简单代码实现蒙特卡洛方法,展示其在文本生成等领域的潜力。随着计算能力提升,蒙特卡洛方法的应用范围不断扩大,成为处理不确定性和复杂系统的重要工具。
69 21
|
2月前
|
安全
Python-打印99乘法表的两种方法
本文详细介绍了两种实现99乘法表的方法:使用`while`循环和`for`循环。每种方法都包括了步骤解析、代码演示及优缺点分析。文章旨在帮助编程初学者理解和掌握循环结构的应用,内容通俗易懂,适合编程新手阅读。博主表示欢迎读者反馈,共同进步。
|
2月前
|
机器学习/深度学习 人工智能 算法
【宠物识别系统】Python+卷积神经网络算法+深度学习+人工智能+TensorFlow+图像识别
宠物识别系统,本系统使用Python作为主要开发语言,基于TensorFlow搭建卷积神经网络算法,并收集了37种常见的猫狗宠物种类数据集【'阿比西尼亚猫(Abyssinian)', '孟加拉猫(Bengal)', '暹罗猫(Birman)', '孟买猫(Bombay)', '英国短毛猫(British Shorthair)', '埃及猫(Egyptian Mau)', '缅因猫(Maine Coon)', '波斯猫(Persian)', '布偶猫(Ragdoll)', '俄罗斯蓝猫(Russian Blue)', '暹罗猫(Siamese)', '斯芬克斯猫(Sphynx)', '美国斗牛犬
220 29
【宠物识别系统】Python+卷积神经网络算法+深度学习+人工智能+TensorFlow+图像识别
|
2月前
|
JSON 安全 API
Python调用API接口的方法
Python调用API接口的方法
407 5
|
3月前
|
机器学习/深度学习 Python
堆叠集成策略的原理、实现方法及Python应用。堆叠通过多层模型组合,先用不同基础模型生成预测,再用元学习器整合这些预测,提升模型性能
本文深入探讨了堆叠集成策略的原理、实现方法及Python应用。堆叠通过多层模型组合,先用不同基础模型生成预测,再用元学习器整合这些预测,提升模型性能。文章详细介绍了堆叠的实现步骤,包括数据准备、基础模型训练、新训练集构建及元学习器训练,并讨论了其优缺点。
164 3
|
23天前
|
存储 缓存 Java
Python高性能编程:五种核心优化技术的原理与Python代码
Python在高性能应用场景中常因执行速度不及C、C++等编译型语言而受质疑,但通过合理利用标准库的优化特性,如`__slots__`机制、列表推导式、`@lru_cache`装饰器和生成器等,可以显著提升代码效率。本文详细介绍了这些实用的性能优化技术,帮助开发者在不牺牲代码质量的前提下提高程序性能。实验数据表明,这些优化方法能在内存使用和计算效率方面带来显著改进,适用于大规模数据处理、递归计算等场景。
58 5
Python高性能编程:五种核心优化技术的原理与Python代码
|
2月前
|
Python
[oeasy]python055_python编程_容易出现的问题_函数名的重新赋值_print_int
本文介绍了Python编程中容易出现的问题,特别是函数名、类名和模块名的重新赋值。通过具体示例展示了将内建函数(如`print`、`int`、`max`)或模块名(如`os`)重新赋值为其他类型后,会导致原有功能失效。例如,将`print`赋值为整数后,无法再用其输出内容;将`int`赋值为整数后,无法再进行类型转换。重新赋值后,这些名称失去了原有的功能,可能导致程序错误。总结指出,已有的函数名、类名和模块名不适合覆盖赋新值,否则会失去原有功能。如果需要使用类似的变量名,建议采用其他命名方式以避免冲突。
52 14

热门文章

最新文章

推荐镜像

更多