opencv阈值分割threshold函数用法详解

函数名 threshold

C++ 版

double threshold( InputArray src, OutputArray dst,double thresh, double maxval, int type );

参数说明:

函数返回值:做阈值分割的像素阈值;
src: 输入图像矩阵,单通道的8位或32位图像矩阵,可以是float类型;
dst:输出图像矩阵,与src类型一致,size大小一致;
thresh:分割所需的图像阈值;
maxval: 当type 选择ThresholdTypes::THRESH_BINARY,或ThresholdTypes::THRESH_BINARY_INV二者之一时,像素的最大值;

type:类型有:

enum ThresholdTypes {
    THRESH_BINARY     = 0, // 大于thresh 为 maxval,否则为 0
    THRESH_BINARY_INV = 1,// 大于thresh 为 0,否则为 maxval
    THRESH_TRUNC      = 2, // 大于thresh 为 thresh,否则为 0
    THRESH_TOZERO     = 3, // 大于thresh  不变,否则为 0
    THRESH_TOZERO_INV = 4, // 大于thresh 为 0,否则 不变
    THRESH_MASK       = 7,
    THRESH_OTSU       = 8, // 使用OTSU阈值
    THRESH_TRIANGLE   = 16 // 使用三角形算法阈值
};

注意:
最后两种是配合前5种算法一起使用的,具体用法为:

threshold(Src8, Dst8, 78, 255, ThresholdTypes::THRESH_BINARY | ThresholdTypes::THRESH_OTSU);
// 这里阈值78不起作用
  • 6
    点赞
  • 40
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
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()显示图像。 综上所述,使用Python的OpenCV进行阈值分割可以使用全局阈值和自适应阈值的方法,并且还可以使用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 ]
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值