Python OpenCV 阈值分割/二值化

1.直方图阈值:使用与双峰图像

# 直方图阈值
plt.hist(image.ravel(),256,[0,256])            # 需要一维数组所以拉平image.ravel()
plt.hist(image.flatten(),np.arange(-0.5,256,1))  #另一种绘制直方图的方法
_, img_bin = cv.threshold(image,125,255,cv.THRESH_BINARY) #根据直方图找阈值,二值化
show(img_bin)

2.三角法阈值:不太好用,最早用来分隔染色体图像。使用单峰图像

plt.hist(image.ravel(),256,[0,256])
plt.show()
th, img_bin = cv.threshold(image,0,255,cv.THRESH_TRIANGLE)   #th代表自动找阈值,0是随便输的参数,代表随机找到的阈值
show(img_bin)                                                #cv.THRESH_TRIANGLE 专门为这种方法配的显示方式

3.迭代法阈值分割

# 迭代法求阈值
T = image.mean()
while True:
    t0 = image[image<T].mean()
    t1 = image[image>=T].mean()
    t = (t0+t1)/2
    if T==t:
        break
    T=t
print(T)

 4.大津法(OTSU)

# 大津法
th, img_bin = cv.threshold(image,0,255,cv.THRESH_OTSU)   
#th代表自动找阈值,0是随便输的参数,代表随机找到的阈值                                             
#cv.THRESH_OTSU 专门为这种方法配的显示方式

opencv 自带接口

5.自适应阈值分割

# 自适应阈值分割
img_bin = cv.adaptiveThreshold(image,255,cv.ADAPTIVE_THRESH_MEAN_C,cv.THRESH_BINARY,61,0)
# 第三个参数位置适应的方法两种:平均值适应,高斯适应
# 61:窗口大小,一般比目标的窗口大一点,取奇数
# 0:取整数

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值