这是一种改进了的阈值技术,其中阈值本身是一个变量。在OpenCV中,这种方法由函数cvAdaptiveThreshold ( ) 来实现。
此函数只能处理单通道8位图像或浮点图像,它要求源图像和目标图像不能使用同一图像。
cvAdaptiveThreshold()
定义:
void cvAdaptiveThreshold(
const CvArr* src,
CvArr* dst,
double max_value,
int adaptive_method=CV_ADAPTIVE_THRESH_MEAN_C,
int threshold_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, 它是一个从均值或加权均值提取的常数, 尽管它可以是负数。
cvAdaptiveThreshold()有两种不同的自适应阈值方法,可以用参数adaptive_method进行设置。在这两种情况下,自适应阈值T (x,y)在每个像素点都不同。通过计算像素点周围的b×b区域的加权平均,然后减去一个常数来得到自适应阈值,b由参数block_size指定,常数由param1指定。
如果使用了CV_ADAPTIVE_THRESH_MEAN_C方法,那么对区域的所有像素平均加权。如果使CV_ADAPTIVE_THRESH_GAUSSIAN_C方法,那么区域中的(x,y)周围的像素根据高斯函数按照它们离中心点的距离进行加权计算。
最后,参数threshold_type和上一篇博客所示的cvThreshold()的参数
threshold_type是一样的。
缺点:
实际上这是一个【边缘检测函数】,可以很好地提取边缘。至于二值化么,不要用这个函数。实际上完全就是披着二值化皮的边缘检测函数。
程序实例&#x