OpenCV二值化cvThreshold和自适应二值化cvAdaptiveThreshold及Otsu

阈值化函数:

double cvThreshold(constCvArr* src, CvArr* dst, double threshold, double max_value,int threshold_type)

参数:  

src –原始数组 (单通道 , 8-bit of 32-bit 浮点数)。

dst –输出数组,必须与 src 的类型一致,或者为 8-bit。

thresh –阈值。

max_value –使用 CV_THRESH_BINARY 和 CV_THRESH_BINARY_INV 的最大值。

threshold_type –对图像取阈值的方法。

threshold_type=CV_THRESH_BINARY:

dst(x,y) = max_value, ifsrc(x,y)>threshold

0, otherwise.

threshold_type=CV_THRESH_BINARY_INV:

dst(x,y) = 0, ifsrc(x,y)>threshold;

dst(x,y) = max_value, otherwise.

threshold_type=CV_THRESH_TRUNC:

dst(x,y) = threshold, ifsrc(x,y)>threshold;  

dst(x,y) = src(x,y), otherwise.

threshold_type=CV_THRESH_TOZERO:

dst(x,y) = src(x,y), if(x,y)>threshold ; 

dst(x,y) = 0, otherwise.

threshold_type=CV_THRESH_TOZERO_INV:

dst(x,y) = 0, ifsrc(x,y)>threshold ; 

dst(x,y) = src(x,y), otherwise.

threshold_type可以使用CV_THRESH_OTSU类型,这样该函数就会使用大律法OTSU得到的全局自适应阈值来进行二值化图片,而参数中的threshold不再起作用。

如:cvThreshold(workImg,workImg,0, 255, CV_THRESH_OTSU|CV_THRESH_BINARY)

 

自适应阈值函数:

voidcvAdaptiveThreshold( const CvArr* src,  CvArr* dst,   double max_value,  intadaptive_method=CV_ADAPTIVE_THRESH_MEAN_C,
                          intthreshold_type=CV_THRESH_BINARY,   int block_size=3,  double param1=5 );

参数:

src-输入图像.

dst-输出图像.

max_value-使用 CV_THRESH_BINARY 和CV_THRESH_BINARY_INV 的最大值.

adaptive_method-自适应阈值算法使用:CV_ADAPTIVE_THRESH_MEAN_C 或 CV_ADAPTIVE_THRESH_GAUSSIAN_C .

threshold_type-取阈值类型:必须是CV_THRESH_BINARY或者CV_THRESH_BINARY_INV.

block_size-用来计算阈值的象素邻域大小: 3, 5, 7, ...

param1-与方法有关的参数。对方法 CV_ADAPTIVE_THRESH_MEAN_C 和 CV_ADAPTIVE_THRESH_GAUSSIAN_C, 

它是一个从均值或加权均值提取的常数,尽管它可以是负数。

对方法 CV_ADAPTIVE_THRESH_MEAN_C,先求出块中的均值,再减掉param1。

对方法 CV_ADAPTIVE_THRESH_GAUSSIAN_C ,先求出块中的加权和(gaussian),再减掉param1。

block_size比较小的时候,相当于提取边缘。

 

结果对比:

OpenCV二值化cvThreshold和自适应二值化cvAdaptiveThreshold及Otsu_第1张图片


阈值化结果如下:

OpenCV二值化cvThreshold和自适应二值化cvAdaptiveThreshold及Otsu_第2张图片

Otsu结果如下:

OpenCV二值化cvThreshold和自适应二值化cvAdaptiveThreshold及Otsu_第3张图片

自适应阈值结果如下:

OpenCV二值化cvThreshold和自适应二值化cvAdaptiveThreshold及Otsu_第4张图片



你可能感兴趣的:(OpenCV,计算机与机器视觉)