[OpenCv](python)图像二值化

39 篇文章 9 订阅
30 篇文章 5 订阅

图像二值化

import cv2 as cv
import numpy as np

“”"

1、 全局阈值函数

cv2.threshold(src, thresh, maxval, type[, dst]) -> retval, dst

参数: src - 输入数组/图像(多通道,8位或32位浮点)

thresh - 阈值

maxval - 最大值,与#THRESH_BINARY和#THRESH_BINARY_INV阈值类型一起使用的最大值(maximum value)

type - 阈值类型

dst - 输出数组/图像(与src相同大小和类型以及相同通道数的数组/图像)。

此外,特殊值#THRESH_OTSU或#THRESH_TRIANGLE可以与上述值之一组合。 在这些情况下,函数使用Otsu或Triangle算法确定最佳阈值,并使用它而不是指定的阈值。

返回值:retval - 阈值 thresh

          dst - 经函数处理后的图像 image

“”"

#全局阈值
def threshold_demo(image):
    gray = cv.cvtColor(image, cv.COLOR_BGR2GRAY)
    # 单个波峰(医学影像)用cv.THRESH_TRIANGLE),多个波峰用cv.THRESH_OTSU
    ret, binary = cv.threshold(gray, 127, 255, cv.THRESH_BINARY|cv.THRESH_OTSU)
    print("threshold value %s"%ret)
    cv.imshow("binary", binary)

“”"

2、局部阈值函数

cv2.adaptiveThreshold(src, maxValue, adaptiveMethod, thresholdType, blockSize, C[, dst]) -> dst

参数:src-输入图像(8位单通道图像)

maxValue-使用 THRESH_BINARY 和 THRESH_BINARY_INV 的最大值.

adaptiveMethod-自适应阈值算法,平均 (ADAPTIVE_THRESH_MEAN_C)或高斯(ADAPTIVE_THRESH_GAUSSIAN_C)

thresholdType-阈值类型,必须为THRESH_BINARY或THRESH_BINARY_INV的阈值类型

blockSize-块大小(奇数且大于1 )

C-常数,从平均值或加权平均值中减去的数。 通常情况下,这是正值,但也可能为零或负值

返回值:dst-经函数处理过的图像
“”"

#局部阈值
def local_threshold(image):
    gray = cv.cvtColor(image, cv.COLOR_BGR2GRAY)
    #平均数大于10才变成白色,去除噪声
    binary = cv.adaptiveThreshold(gray, 255, cv.ADAPTIVE_THRESH_GAUSSIAN_C, cv.THRESH_BINARY, 25, 10)
    cv.imshow("binary", binary)
#自适应阈值
def custom_threshold(image):
    gray = cv.cvtColor(image, cv.COLOR_BGR2GRAY)
    # 求出宽高
    h, w = gray.shape[:2]
    # 变成一维数组
    m = np.reshape(gray, [1, w*h])
    mean = m.sum() / (w*h)
    print("mean : ", mean)
    ret, binary = cv.threshold(gray, mean, 255, cv.THRESH_BINARY)
    cv.imshow("binary", binary)


print("--------- Python OpenCV Tutorial ---------")
src = cv.imread("D:/vcprojects/images/test.png")
cv.namedWindow("input image", cv.WINDOW_AUTOSIZE)
cv.imshow("input image", src)
custom_threshold(src)
cv.waitKey(0)

cv.destroyAllWindows()

阈值类型:

1)二进制阈值化 THRESH_BINARY
2) 反二进制阈值化THRESH_BINARY_INV
3)截断阈值化 THRESH_TRUNC
4) 阈值化为0 THRESH_TOZERO
5) 反阈值化为0 THRESH_TOZERO_INV
在这里插入图片描述

全局阈值结果:

在这里插入图片描述

局部阈值结果:

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值