图像阈值(opencv_python学习)

文章介绍了OpenCV库在图像处理中的阈值技术,包括简单阈值处理的不同类型,如二值化和反二值化,以及自适应阈值方法,用于处理光照不均的图像。此外,还讲解了Otsu二值化,一种自动确定全局阈值的方法,通过分析图像直方图找到最佳分割点。
摘要由CSDN通过智能技术生成

简单阈值

cv.threshold 函数是 OpenCV 中用于应用阈值处理的函数,具体的语法如下:

ret, dst = cv2.threshold(src, thresh, maxval, type[, dst])

参数说明:

  • src:源图像,应为灰度图像(单通道)。
  • thresh:阈值,用于对像素值进行分类。
  • maxval:分配给超过阈值的像素值的最大值。
  • type:阈值处理类型,用于控制像素分类的方式,可以使用以下常见的简单阈值类型:
  • cv2.THRESH_BINARY:二值化阈值处理,将小于阈值的像素值设置为0,大于等于阈值的像素值设置为 maxval。
  • cv2.THRESH_BINARY_INV:反二值化阈值处理,将小于阈值的像素值设置为 maxval,大于等于阈值的像素值设置为0。
  • cv2.THRESH_TRUNC:截断阈值处理,将小于阈值的像素值保持不变,大于等于阈值的像素值设置为阈值。
  • cv2.THRESH_TOZERO:阈值化为零处理,将小于阈值的像素值设置为0,大于等于阈值的像素值保持不变。
  • cv2.THRESH_TOZERO_INV:反阈值化为零处理,将小于阈值的像素值保持不变,大于等于阈值的像素值设置为0。
  • dst:输出的目标图像(可选参数),与源图像具有相同的尺寸和数据类型。
    函数返回两个值:

  • ret:计算的阈值值。

  • dst:处理后的图像。

在这里插入图片描述

自适应阈值

自适应阈值化是一种基于局部像素区域确定阈值的阈值处理方法,可以解决图像在不同区域具有不同光照条件的情况下的阈值处理问题,算法基于像素周围的小区域确定像素的阈值。
OpenCV 中提供了 cv2.adaptiveThreshold 函数来实现自适应阈值化。

cv.adaptiveThreshold(src, maxValue, adaptiveMethod, thresholdType, blockSize, C[, dst])
  • src:输入图像,必须为单通道(灰度图像)。
  • maxValue:所得阈值的最大值。
  • adaptiveMethod:自适应阈值计算方法,可以选择以下两种方法之一:
  • cv.ADAPTIVE_THRESH_MEAN_C:阈值为邻域像素的平均值减去常数 C。
  • cv.ADAPTIVE_THRESH_GAUSSIAN_C:阈值为邻域像素的高斯加权平均值减去常数 C。
  • thresholdType:阈值类型,可以选择以下两种类型之一:
  • cv.THRESH_BINARY:大于阈值的像素值设为 maxValue,小于等于阈值的像素值设为 0。
  • cv.THRESH_BINARY_INV:大于阈值的像素值设为 0,小于等于阈值的像素值设为 maxValue。
  • blockSize:邻域大小,用于计算每个像素的阈值。
  • C:从邻域像素的平均值或加权总和中减去的一个常数。
  • dst:输出图像,与输入图像具有相同的大小和深度。如果未提供,则函数会创建一个新的图像来存储结果。
    在这里插入图片描述
import numpy as np
import cv2 as cv

# 读取图像
img = cv.imread('pic1.jpg', 0)

# 获取图像尺寸
rows, cols = img.shape

max_value = 255
adaptive_method = cv.ADAPTIVE_THRESH_MEAN_C
threshold_type = cv.THRESH_BINARY
block_size = 11
constant = 2
threshold_img = cv.adaptiveThreshold(img, max_value, adaptive_method, threshold_type, block_size, constant)

# 显示结果
cv.imwrite('pic.jpg', threshold_img)
cv.waitKey(0)
cv.destroyAllWindows()

在这里插入图片描述

Otsu二值化

Otsu的二值化(Otsu’s thresholding)是一种自动确定全局阈值的图像二值化方法。它通过分析图像的直方图,找到一个最佳的阈值,以将图像分为前景和背景两部分。

cv2.threshold函数进行Otsu的二值化处理。在函数中,将阈值设为0(该值不会影响Otsu的计算),将阈值类型设置为cv2.THRESH_BINARY + cv2.THRESH_OTSU。函数会自动计算出最佳的阈值,并将结果保存在threshold_img变量中。

_, threshold_img = cv2.threshold(img, 0, 255, cv2.THRESH_BINARY + cv2.THRESH_OTSU)

在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

蜡笔小新配吉良吉影

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值