【Emgu.CV教程】3.4、色彩处理之AdaptiveThreshold()自适应阈值化处理

        之前学了Threshold()二值化函数,这个是在每一张照片里面,用同一个阈值进行二值化操作,但是对于一些对比度比较大的图片,可能会出现问题。比如这张照片想要提取出黑色文字文字:

        如果执行以下代码:

CvInvoke.Threshold(srcMat, gray, 160, 255, ThresholdType.Binary);

        也就是以160的阈值进行ThresholdType.Binary的二值化,它的结果是这样的:

         这个原始照片背景纸是白色的,前景文字是黑色的,但是最突出的特点是照片的上半部分比下半部分要暗。对于这种对比度大的照片,直接用Threshold()二值化函数的效果就不太好。这时候,AdaptiveThreshold()自适应阈值化处理函数闪亮登场。

         函数含义如下:

public static void AdaptiveThreshold(
    IInputArray src,  // 输入图像
    IOutputArray dst, // 输出图像
    double maxValue, // 输出图像的最大值,一般设为255
    AdaptiveThresholdType adaptiveType, // 要使用的自适应阈值算法,GaussianC或者MeanC
    ThresholdType thresholdType, // 阈值类型,分别为Binary和BinaryInv
    int blockSize, // 计算像素阈值的像素邻域的大小,大于0的奇数
    double param1 // 偏移值调整量,从GaussianC或者MeanC计算出的值再减去的常量,就是最终值,它可以是正的,也可以是零或负的。
)

         其中,MeanC的计算方法是计算出领域的平均值再减去第七个参数2的值。,GaussianC的计算方法是计算出领域的高斯均值再减去第七个参数2的值。还是上面那张图,自适应阈值算法采用GaussianC,二值化类型选择Binary,像素邻域的大小为9,偏移调整量为3,输出的结果是:

         这下是不是好多了,基本上所有的黑色文字都能看清楚了。这个函数有5个输入参数,具体的使用方法和使用效果,需要读者们多找几张图片上手试试。函数用法很简单,代码在下面:

                CvInvoke.AdaptiveThreshold(srcMat, gray, 255, AdaptiveThresholdType.GaussianC, ThresholdType.Binary, 9, 3);

原创不易,请勿抄袭。共同进步,相互学习。 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值