opencv 自适应二值化cv::adaptiveThreshold()函数详解(复杂背景下提取划痕)

前言

从以下复杂背景图片下提取划痕
在这里插入图片描述
假设采用全局阈值二值化, cv::threshold(src, globalBinayImage, 150, 255, cv::THRESH_BINARY_INV),很难得到最优的二值化效果,划痕没有完整提取出来,反而把背景也提取出来了:
在这里插入图片描述

这个时候就需要一种能够自适应的二值化算法上场了。

一、opencv cv::adaptiveThreshold()函数

1.函数原型:

CV_EXPORTS_W void adaptiveThreshold( InputArray src, OutputArray dst,
                                     double maxValue, int adaptiveMethod,
                                     int thresholdType, int blockSize, double C );

2.参数说明:

src:输入8位单通道图像。
dst:输出图像,大小和类型与src相同。
maxValue:满足条件的像素所分配的非零值。
adaptiveMethod:要使用的自适应阈值算法,ADAPTIVE_THRESH_MEAN_C或者ADAPTIVE_THRESH_GAUSSIAN_C
thresholdType:阈值类型,必须是THRESH_BINARY或者HRESH_BINARY_INV,指示要提取亮区域还是暗区域
blockSize:用于计算像素阈值的像素邻域的大小:3,5,7,以此类推。
C:偏移值调整量,从每个邻域计算出的平均值或高斯加权平均值中减去的常量,就是最终阈值,它可以是正的,也可以是零或负的。

3.函数原理:

算法通过计算每个像素周围blockSize x blockSize大小像素块的加权均值并减去常量C得到该像素值的最终阈值,每个像素都会有一个自适应的动态阈值。

代码示例

   cv::Mat src;
    src = cv::imread("D:\\QtProject\\Opencv_Example\\adaptiveThreshold\\adaptiveThreshold.png", cv::IMREAD_GRAYSCALE);
    if (src.empty()) {
      cout << "Cannot load image" << endl;
      return;
    }
    //全局二值化
    cv::Mat globalBinayImage;
    cv::threshold(src, globalBinayImage, 150, 255, cv::THRESH_BINARY_INV);


    //自适应二值化
    cv::Mat binaryImage;
    cv::adaptiveThreshold(src, binaryImage, 255,cv::THRESH_BINARY_INV, cv::ADAPTIVE_THRESH_GAUSSIAN_C, 7,8);

程序运行效果:
在这里插入图片描述

  • 2
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
自适应Canny算子边缘提取是一种改进的Canny边缘检测方法。Canny边缘检测方法是一种常用的图像处理技术,它通过利用梯度方向信息和双阈值技术来获取单像素连续边缘。而自适应Canny算子边缘提取则是在Canny算子的基础上进行了一些优化。 自适应Canny算子边缘提取的主要思想是根据图像的局部特征调整边缘检测参数,使得算法更加适应不同部分的边缘特征。这个方法可以提高边缘检测的准确性和鲁棒性。 具体而言,自适应Canny算子边缘提取可以通过以下步骤实现: 1. 对图像进行低通滤波,以平滑图像并减少噪声的影响。 2. 对每个像素进行处理,寻找边缘的位置和边缘法向。 3. 使用一种称为“非极大值抑制”的技术,在边缘法向上寻找局部最大值,以得到单像素连续的边缘。 4. 对边缘图像进行滞后阈值化处理,以消除虚假响应。 5. 针对不同的图像区域,根据局部特征调整边缘检测的参数,例如滤波器的大小和阈值的选择。 通过自适应Canny算子边缘提取,可以提高边缘检测的精度和稳定性,使得算法能够更好地适应不同图像的特征。这种方法在实际图像处理中具有广泛的应用,能够有效地提取图像中的边缘信息。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [Canny算子Matlab实现](https://blog.csdn.net/Hey_everyday/article/details/117931635)[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^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [canny算子_Canny边缘检测算法](https://blog.csdn.net/weixin_39761195/article/details/110405483)[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^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [自适应阈值canny边缘检测(功能实现)](https://blog.csdn.net/qq_42593411/article/details/121292704)[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^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值