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

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

【Emgu.CV教程】第18篇 、色彩处理之AdaptiveThreshold()自适应阈值化处理_第1张图片

        如果执行以下代码:

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

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

【Emgu.CV教程】第18篇 、色彩处理之AdaptiveThreshold()自适应阈值化处理_第2张图片

         这个原始照片背景纸是白色的,前景文字是黑色的,但是最突出的特点是照片的上半部分比下半部分要暗。对于这种对比度大的照片,直接用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,输出的结果是:

【Emgu.CV教程】第18篇 、色彩处理之AdaptiveThreshold()自适应阈值化处理_第3张图片

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

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

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

你可能感兴趣的:(Emgu.CV使用教程,计算机视觉,c#,图像处理,Emgu.CV)