Python 之OpenCV的阈值分割

本文深入探讨了图像处理中的阈值分割技术,包括固定阈值分割如THRESH_BINARY、THRESH_BINARY_INV等,以及自动阈值分割如adaptiveThreshold。同时,介绍了高斯滤波和滤波器的应用,帮助读者理解如何有效进行图像分割。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

阈值分割

cv.threshold(src, thresh, maxval, type, dst=None)

src:原图

thresh:阈值

maxval:当type指定为THRESH_BINARY或THRESH_BINARY_INV时,需要设置该值;

type:不同类型的阈值

类型条件选中阈值区间
THRESH_BINARYif src(x,y) > thresh
dst(x,y) = maxValue
else
dst(x,y) = 0
thresh<= dst(x,y)<maxValue
THRESH_BINARY_INVif src(x,y) > thresh
dst(x,y) = 0
else
dst(x,y) = maxValue
dst(x,y)<thresh or dst(x,y)>maxValue
THRESH_TRUNCif src(x,y) > thresh
dst(x,y) = thresh
else
dst(x,y) =src(x,y)
大于thresh的设置为thresh,小于的不变
THRESH_TOZEROif src(x,y) > thresh
dst(x,y) = src(x,y)
else
dst(x,y) =0
大于thresh的不变,小于的设置为0
THRESH_TOZERO_INVif src(x,y) > thresh
dst(x,y) = 0
else
dst(x,y) =src(x,y)
大于thresh的设置为0,小于的不变

输出:有两个结果输出,第一个是使用的阈值,第二个是应用阈值后的图像

自动阈值分割

cv.adaptiveThreshold(src,maxValue,adaptiveMethod,thresholdType,blockSize,C)

src输入灰度图像
maxValue阈值最大值
adaptiveMethod指定阈值计算方式(ADAPTIVE_THRESH_MEAN_C:阈值是邻近区域的平均值减去一个常数,ADAPTIVE_THRESH_GAUSSIAN_C:阈值是邻域值的高斯加权总和减去一个常数)
thresholdType不同类型的阈值
blockSize邻域大小
C一个常熟,阈值等于平均值或加权平均值减去一个常数

高斯滤波

GaussianBlur(src,ksize,sigmaX)

src输入图像
ksize高斯滤波模版大小
sigmaXx方向上的标准差(标准差对结果的影响:调大标准差即提高了远处像素对中心像素的影响,标准差越大,曲线越平滑)

 

低通滤波器(LPF)

有助于消除噪音,是图像模糊

高通滤波器(HPF)

有助于在图像中找到边缘

Python中使用OpenCV进行阈值分割的方法有几种,其中包括全局阈值和自适应阈值。其中,全局阈值是指对整幅图像应用一个固定的阈值进行分割,而自适应阈值是指对图像的不同区域应用不同的阈值进行分割。 在使用全局阈值的方法中,可以使用cv.threshold()函数。该函数的参数包括原始图像、设定的阈值、最大像素值、阈值类型等。示例代码如下所示: ``` import cv2 as cv img = cv.imread("21.bmp", 0) ret, thresh = cv.threshold(img, 127, 255, cv.THRESH_BINARY) ``` 在上述代码中,img是原始图像,127是设定的阈值,255是最大像素值,cv.THRESH_BINARY是阈值类型。经过处理后,得到的分割结果保存在thresh中。 在自适应阈值的方法中,可以使用cv.adaptiveThreshold()函数。该函数的参数包括原始图像、最大像素值、自适应阈值类型、阈值类型、邻域大小和C值等。示例代码如下所示: ``` import cv2 as cv img = cv.imread('21.bmp', 0) th = cv.adaptiveThreshold(img, 255, cv.ADAPTIVE_THRESH_MEAN_C, cv.THRESH_BINARY, 11, 4) ``` 在上述代码中,img是原始图像,255是最大像素值,cv.ADAPTIVE_THRESH_MEAN_C是自适应阈值类型,cv.THRESH_BINARY是阈值类型,11是邻域大小,4是C值。经过处理后,得到的分割结果保存在th中。 另外,还可以使用matplotlib库来展示阈值分割的结果。示例代码如下: ``` import cv2 as cv from matplotlib import pyplot as plt img = cv.imread('21.bmp', 0) ret, thresh = cv.threshold(img, 127, 255, cv.THRESH_BINARY) plt.subplot(1, 2, 1), plt.imshow(img, 'gray') plt.title('Original Image') plt.subplot(1, 2, 2), plt.imshow(thresh, 'gray') plt.title('Thresholded Image') plt.show() ``` 在上述代码中,img是原始图像,thresh是阈值分割后的结果。通过plt.subplot()函数将原始图像和分割结果显示在同一张图中,最后使用plt.show()显示图像。 综上所述,使用PythonOpenCV进行阈值分割可以使用全局阈值和自适应阈值的方法,并且还可以使用matplotlib库来展示分割结果。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [OpenCV-Python-(6)-阈值分割](https://blog.csdn.net/qq_40755643/article/details/84066750)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* *3* [opencv-python 详解阈值分割](https://blog.csdn.net/RayChiu757374816/article/details/119998873)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

乌里随记

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

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

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

打赏作者

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

抵扣说明:

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

余额充值