当前位置: 代码网 > it编程>前端脚本>Vue.js > Python实现图片二值化的详细代码

Python实现图片二值化的详细代码

2024年05月26日 Vue.js 我要评论
1. 什么是二值化图像二值化就是将图像上的像素点的“灰度值”设置为[0, 0, 0]或[255, 255, 255],即要么纯黑,要么纯白。2. 二值化的作用通过二值化,能更好

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图片二值化内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com