8.12-8.19:自适应阈值
【一】 基本原理
图像阈值化的一般目的是从灰度图像中分离目标区域和背景区域,然而仅仅通过设定固定阈值很难达到理想的分割效果。在实际应用中,我们可以通过某个像素的邻域以某种方法确定这个像素应该具有的阈值,进而保证图像中各个像素的阈值会随着周期围邻域块的变化而变化。在灰度图像中,灰度值变化明显的区域往往是物体的轮廓,所以将图像分成一小块一小块的去计算阈值往往会得出图像的轮廓,而固定阈值的方法就不行。
函数实现:
Void cv::adaptiveThreshold(
cv::InputArray src,
cv::OutputArray dst,
double maxValue,
int adaptiveMethod,
int thresholdType,
int blockSize,
double C);
【二】 步骤
- 对原始图像进行灰度化
- 确定各像素的阈值
计算每个像素周围b*b(blockSize)区域的加权平均值然后减去常数C,加权方法可选均值加权或者高斯 - 阈值化操作
对各像素进行阈值化处理。同固定阈值方法一样,有多种阈值类型(thresholdType):二值化、反二值化、截断、置0、反置0。
【三】 实验
实验进行了两次阈值化操作,一次固定阈值,一次自适应阈值。
源代码:
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/core/core.hpp>
#include <opencv2/imgproc.hpp>
#include <iostream>