Python实现图片二值化及灰度处理方式
简介
在数字图像处理中,为了便于计算机处理和识别图像信息,需要将彩色图像转换为灰度图像或二值图像。本文将介绍如何使用Python实现图片的灰度处理和二值化。
灰度处理
灰度处理是将彩色图像转换为灰度图像的过程,在此过程中,可以将每个像素点的R、G、B三个值的加权平均值作为灰度值,从而达到降低图像复杂度和压缩图像尺寸的目的。
示例代码:
from PIL import Image
# 打开图片
img = Image.open('img.jpg')
# 转换为灰度图像
img_gray = img.convert('L')
# 保存图片
img_gray.save('img_gray.jpg')
在上述代码中,使用了Python的PIL库(Python Imaging Library)来进行图片操作,具体过程为:
- 打开需要处理的图片
img
; - 使用
convert()
函数将图片转换为灰度图像img_gray
; - 使用
save()
函数保存生成的灰度图像。
二值化处理
二值化处理是将灰度图像转换为二值图像的过程,将图像中的像素值分为两类:黑色和白色(或者其他颜色),以此来区分图像中的不同部分,方便后续的图像处理。
全局阈值二值化
全局阈值二值化是将整个图像中的像素点按照一个全局的阈值进行二值化处理,大于阈值的像素值设为白色,小于等于阈值的像素值设为黑色。
示例代码:
from PIL import Image
# 打开图片
img_gray = Image.open('img_gray.jpg')
# 二值化处理
threshold = 200 # 设置全局阈值为200
img_blackwhite = img_gray.point(lambda x: 255 if x > threshold else 0)
# 保存图片
img_blackwhite.save('img_blackwhite.jpg')
在上述代码中,使用了PIL库的point()
方法来对灰度图像进行二值化处理,具体过程为:
- 打开灰度图像
img_gray
; - 设置全局阈值
threshold
为200; - 对灰度图像中每个像素点进行遍历,将像素值大于阈值的设为白色(值为255),小于等于阈值的设为黑色(值为0);
- 使用
save()
函数保存生成的二值图像。
自适应阈值二值化
自适应阈值二值化是将图像分成若干个小区域,并针对每个小区域分别计算一个局部阈值进行二值化处理,可以有效地解决全局阈值对于图像过度处理或处理不足的问题。
示例代码:
from PIL import Image, ImageFilter
# 打开图片
img_gray = Image.open('img_gray.jpg')
# 自适应阈值二值化
img_gray_filter = img_gray.filter(ImageFilter.FIND_EDGES)
img_blackwhite = img_gray.point(lambda x: 255 if x >img_gray_filter.getpixel((x,y))+ 10 else 0)
# 保存图片
img_blackwhite.save('img_blackwhite.jpg')
在上述代码中,使用了PIL库的filter()
方法对灰度图像进行滤波处理,从而得到边缘信息,具体过程为:
- 打开灰度图像
img_gray
; - 对灰度图像进行边缘滤波
img_gray_filter.filter(ImageFilter.FIND_EDGES)
,得到图像边缘信息; - 针对每个像素点,获取其位置
(x, y)
和像素值x
和附近像素的平均值作为局部阈值,利用point()
方法进行二值化处理; - 使用
save()
函数保存生成的二值图像。
总结
在本文中,介绍了如何使用Python实现灰度处理和二值化处理。对于不同的需求,可以采用不同的二值化方法,并且还可以结合一些滤波处理得到更好的处理效果。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:python实现图片二值化及灰度处理方式 - Python技术站