cv::adaptiveThreshold()
是 OpenCV 中用于图像处理的一个函数。它实现了自适应阈值化,常用于将灰度图像转换为二值图像。与简单的全局阈值不同,自适应阈值能够根据图像的局部区域自动调整阈值,从而在光照不均匀的条件下也能有效分割前景和背景。
函数原型
void cv::adaptiveThreshold(
InputArray src,
OutputArray dst,
double maxValue,
int adaptiveMethod,
int thresholdType,
int blockSize,
double C);
参数说明
src
: 输入图像,应该是单通道的灰度图。dst
: 输出图像,将存储二值化后的结果。maxValue
: 二值化后最高的值(通常为255)。adaptiveMethod
: 自适应方法,可以是以下两种之一:ADAPTIVE_THRESH_MEAN_C
: 根据邻域平均计算阈值。ADAPTIVE_THRESH_GAUSSIAN_C
: 根据邻域加权平均计算阈值(高斯权重)。
thresholdType
: 阈值类型,通常选择THRESH_BINARY
或THRESH_BINARY_INV
。blockSize
: 领域大小(必须为奇数),用来计算每个像素的自适应阈值。这个参数定义了在每个像素周围考虑多少邻域像素。C
: 从计算出的阈值得到实际二进制输出时要减去的常数。
示例代码
下面是一个使用 cv::adaptiveThreshold()
的示例:
#include <opencv2/opencv.hpp>
int main() {
// 读取输入灰度图
cv::Mat src = cv::imread("image.jpg", cv::IMREAD_GRAYSCALE);
if (src.empty()) {
std::cerr << "Image not found!" << std::endl;
return -1;
}
// 定义输出图像
cv::Mat dst;
// 使用自适应阈值化
cv::adaptiveThreshold(src, dst, 255,
cv::ADAPTIVE_THRESH_GAUSSIAN_C,
cv::THRESH_BINARY, 11, 2);
// 显示结果
cv::imshow("Original Image", src);
cv::imshow("Adaptive Threshold Image", dst);
// 等待用户按键并退出
cv::waitKey(0);
return 0;
}
在这个示例中,我们首先读取一张灰度图片,然后应用自适应阈值,并显示原始和处理后的图片。
内容由零声教学AI助手提供,问题来源于学员提问