OpenCV-python学习笔记(五)——shreshoding阈值化

shreshoding阈值化

阈值化就是图像的二值化,我们通常选择把一幅灰度图转换成二值图,里面的像素值要么是0,要么是255。

一个简单地方法就是选择一个数值p,当像素值小于这个数的时候,就变成0,大于这个数的时候就变成了255。

通常我们使用阈值化,来聚焦一幅图形中的物体或感兴趣的区域。

1 simple thresholding简单阈值化

# 简单二值化
# 155是一个阈值,高于这个值得变成白色(前景),低于这个值得变成黑色(背景)
(T, thersh) = cv2.threshold(blurred, 155, 255, cv2.THRESH_BINARY)
cv2.imshow("Threshold Binary", thresh)
# 反向二值化
(T, thershInv) = cv2.threshold(blurred, 155, 255, cv2.THRESH_BINARY_INV)
cv2.imshow("Threshold Binary Inverse", threshInv)
# 蒙版和原图叠加
cv2.imshow("coins", cv2.bitwise_and(image, image, mask = threshInv))

在这里插入图片描述

2 adaptive shresholding自适应阈值

上面的方法必须手动指定一个阈值,那么可以不手动指定阈值吗?

# 使用平均法实现自适应阈值
# 11表示邻域大小,4表示在平均值中减去4
thresh = cv2.adaptiveThreshold(blurred, 255, cv2.ADAPTIVE_THERESHOLD_MEAN_C, cv2.THRESH_BINARY_INV, 11, 4)
cv2.imshow("Mean Thresh", thresh)
# 使用高斯加权法实现自适应阈值
thresh = cv2.adaptiveThreshold(blurred, 255, cv2.ADAPTIVE_THERESHOLD_GAUSSIAN_C, cv2.THRESH_BINARY_INV, 15, 3)
cv2.imshow("Gaussian Thresh", thresh)

在这里插入图片描述

3 Otsu and Riddler-Calvard

另外一个自动计算阈值的方法就是使用Ostu方法。

Otsu方法假定在灰度图的直方图中,有两个峰,Otsu方法尝试寻找一个最优的值来分隔这两个峰。

import mahotas
# 使用mahotas里面的otsu方法计算,最终得到T = 137
T = mahotas.thresholding.otsu(blurred)
thresh = image.copy()
thresh[thresh > T] = 255
thresh[thresh < T] = 0
thresh = cv2.bitwise_not(thresh)
cv2.imshow("Otsu", thresh)
# 使用mahotas里面的riddler-carvard方法计算,最终也得到T = 137
T = mahotas.thresholding.rc(blurred)
thresh = image.copy()
thresh[thresh > T] = 255
thresh[thresh < T] = 0
thresh = cv2.bitwise_not(thresh)
cv2.imshow("Riddler-Calvard", thresh)

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值