def showImage(name,img):
plt.imshow(img,cmap="gray")
plt.title(name)
plt.show()
#大津算法查找阈值,然后二值化和迭代阈值二值化效果一样的
def Ostu(img):
Sigma=-1
T=0
for t in range(0,256):
bg=img[img<=t]
obj=img[img>t]
#p0,01表示计算背景、前景的数量概率
p0=bg.size/img.size
p1=obj.size/img.size
#m0,m1表示背景、前景的平均值
m0= 0 if bg.size==0 else bg.mean()
m1=0 if obj.size==0 else obj.mean()
#根据公式计算阈值
sigma=p0*p1*(m0-m1)**2
if sigma>Sigma:
Sigma=sigma
T=t
print(T)
img2 = np.where(img > T, 255, 0)
return img2
if __name__=="__main__":
img=cv.imread("../image/goldpig.jpg",0)
img=cv.GaussianBlur(img,(3,3),1)
img2=Ostu(img)
img2=np.uint8(img2)
showImage("img2",img2)
Python实现大津算法
于 2023-03-20 08:37:07 首次发布