import sys, os
import numpy as np
from PIL import Image, ImageDraw
# 二值数组
t2val = {}
ave1=[]
ave2=[]
number=0
def twoValue(image, G):
for y in range(0, image.size[1]):
for x in range(0, image.size[0]):
g = image.getpixel((x, y))
if g > G:
t2val[(x, y)] = 1
else:
t2val[(x, y)] = 0
def threshold(image,number):
if number==0:
number=np.mean(image)
ave1.clear()
ave2.clear()
for y in range(0, image.size[1]):
for x in range(0, image.size[0]):
g = image.getpixel((x, y))
if g > number:
ave1.append (g)
else:
ave2.append (g)
ave(image,number)
def ave(image,number):
number1=np.mean(ave1)
number2 = np.mean(ave2)
if 2*number>(number1+number2)+5:
number=(number1+number2)/2
threshold(image, number)
elif 2*number<(number1+number2)-5:
number = (number1 + number2) / 2
threshold(image, number)
else:
number = (number1 + number2) / 2
twoValue(image, number)
def saveImage(filename, size):
image = Image.new("1", size)
draw = ImageDraw.Draw(image)
for x in range(0, size[0]):
for y in range(0, size[1]):
draw.point((x, y), t2val[(x, y)])
image.save(filename)
filepath = 'C:/Users/asus/Desktop/image1'
for filename in os.listdir(filepath):
image = Image.open('C:/Users/asus/Desktop/image1/%s' % filename).convert("L")
threshold(image,0)
saveImage('C:/Users/asus/Desktop/imageresult/%s' % filename, image.size)
python实现图片迭代法二值化
最新推荐文章于 2023-12-18 23:29:30 发布
该博客主要介绍了图像处理中的二值化技术。通过定义阈值函数`threshold`和二值化函数`twoValue`,对灰度图像进行处理。算法首先计算图像的平均值作为初始阈值,然后不断调整阈值,使图像的亮部和暗部的平均值差在一定范围内,从而实现自动阈值选择。最终将处理后的二值化图像保存到指定路径。
摘要由CSDN通过智能技术生成