Python实现图片二值化的详细代码
1. 什么是二值化
图像二值化就是将图像上的像素点的“灰度值”设置为[0, 0, 0]或[255, 255, 255],即要么纯黑,要么纯白。
2. 二值化的作用
通过二值化,能更好地分析物体的形状和轮廓。
3. 二值化的实现
二值化的实现一般有: 全局阈值法、自适应阈值法、OTSU二值化等
(1)全局阈值法
就是选定一个全局阈值,大于这个值的色素点就赋值为255;反之为0。
(2)自适应阈值法
全局阈值法相对比较简单粗暴。自适应阈值法的原理就是将像素点与该点所在区域的像素的平均值做比较,大于则赋予255;反之,为0.
(3)OTSU二值化
不太明白,后续遇到后再进行补充。
4.代码实现
# --------------------------- # @Time : 2022/5/2 22:37 # @Author : lcq # @File : two_.py # @Function : 图像二值化 # --------------------------- import cv2 import matplotlib.pyplot as plt import matplotlib import numpy as np matplotlib.rcParams['font.sans-serif'] = ['SimHei'] # 显示中文 # 为了坐标轴负号正常显示。matplotlib默认不支持中文,设置中文字体后,负号会显示异常。需要手动将坐标轴负号设为False才能正常显示负号。 matplotlib.rcParams['axes.unicode_minus'] = False # 读取灰度图像 img = cv2.imread("C:\\Users\\17631\\Desktop\\test.jpeg", 0) print("原图的shape: ", img.shape) plt.subplot(2, 2, 1) plt.imshow(img, cmap='gray') plt.title("原图") # 1.全局阈值法 ret, mask_all = cv2.threshold(src=img, # 要二值化的图片 thresh=127, # 全局阈值 maxval=255, # 大于全局阈值后设定的值 type=cv2.THRESH_BINARY) # 设定的二值化类型,THRESH_BINARY:表示小于阈值置0,大于阈值置填充色 print("全局阈值的shape: ", mask_all.shape) plt.subplot(2, 2, 2) plt.imshow(mask_all, cmap='gray') plt.title("全局阈值") # 2.自适应阈值法 mask_local = cv2.adaptiveThreshold(src=img, # 要进行处理的图片 maxValue=255, # 大于阈值后设定的值 adaptiveMethod=cv2.ADAPTIVE_THRESH_MEAN_C, # 自适应方法,ADAPTIVE_THRESH_MEAN_C:表区域内均值;ADAPTIVE_THRESH_GAUSSIAN_C:表区域内像素点加权求和 thresholdType=cv2.THRESH_BINARY, # 同全局阈值法中的参数一样 blockSize=11, # 方阵(区域)大小, C=1) # 常数项,每个区域计算出的阈值的基础上在减去这个常数作为这个区域的最终阈值,可以为负数 print("局部阈值的shape: ", mask_local.shape) plt.subplot(2, 2, 3) plt.imshow(mask_local, cmap='gray') plt.title("局部阈值") # 3.OTSU二值化 ret2, mask_OTSU = cv2.threshold(img, 0, 255, cv2.THRESH_BINARY + cv2.THRESH_OTSU) print("OTSU的shape: ", mask_OTSU.shape) plt.subplot(2, 2, 4) plt.imshow(mask_OTSU, cmap='gray') plt.title("OTSU") plt.show()
效果:
打印的维度:
原图的shape: (2338, 1080)
全局阈值的shape: (2338, 1080)
局部阈值的shape: (2338, 1080)
OTSU的shape: (2338, 1080)
注:
本文的代码实现有参考这一篇文章,这篇文章写得非常好,各位可查看:添加链接描述
到此这篇关于Python实现图片二值化的文章就介绍到这了,更多相关Python图片二值化内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
相关文章
解决antd 下拉框 input [defaultValue] 的值的问题
这篇文章主要介绍了解决antd 下拉框 input [defaultValue] 的值的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧2020-10-10Vue引用第三方datepicker插件无法监听datepicker输入框的值的解决
这篇文章主要介绍了Vue引用第三方datepicker插件无法监听datepicker输入框的值的解决,具有一定的参考价值,感兴趣的小伙伴们可以参考一下2018-01-01vue3中defineProps传值使用ref响应式失效详解
这篇文章主要给大家介绍了关于vue3中defineProps传值使用ref响应式失效的相关资料,文章通过实例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下2022-03-03
最新评论