自适应阈值操作:cv::adaptiveThreshold()
cv::adaptiveThreshold()
是OpenCV库中的一个函数,用于图像处理中的自适应阈值二值化操作。这个函数通常用于将灰度图像转换为二值图像,其中每个像素的阈值是根据其周围邻域的像素值自动确定的,从而使图像在不同光照条件下能够获得更好的二值化结果。
以下是cv::adaptiveThreshold()
函数的一般用法和参数:
void cv::adaptiveThreshold(
cv::InputArray src, // 输入灰度图像
cv::OutputArray dst, // 输出二值图像
double maxValue, // 高于阈值的像素值
int adaptiveMethod, // 自适应阈值算法
int thresholdType, // 阈值类型
int blockSize, // 邻域大小
double C // 从均值中减去的常数
);
src
: 输入灰度图像。dst
: 输出二值图像。maxValue
: 高于阈值的像素值,通常为255。adaptiveMethod
: 自适应阈值算法,可以是cv::ADAPTIVE_THRESH_MEAN_C
(根据邻域均值确定阈值)或cv::ADAPTIVE_THRESH_GAUSSIAN_C
(根据邻域加权平均确定阈值)。thresholdType
: 阈值类型,通常为cv::THRESH_BINARY
或cv::THRESH_BINARY_INV
,分别表示二值化和反二值化。blockSize
: 邻域大小,用于计算自适应阈值。C
: 从均值中减去的常数,可以调整阈值的灵敏度。
使用这个函数,你可以根据图像的局部信息自动确定每个像素的阈值,从而获得更好的二值化结果。不同的参数选择会产生不同的效果,你可以根据你的具体需求进行调整。
以下是一个使用cv::adaptiveThreshold()函数的C++示例,该示例演示了如何将输入灰度图像进行自适应阈值二值化处理:
include <opencv2/opencv.hpp>
#include <iostream>
int main() {
// 读取输入图像
cv::Mat srcImage = cv::imread("1.jpg", cv::IMREAD_GRAYSCALE);
if (srcImage.empty()) {
std::cerr << "Error: Could not read the input image." << std::endl;
return -1;
}
// 创建输出图像
cv::Mat dstImage;
// 定义自适应阈值二值化参数
int blockSize = 11; // 邻域大小
double maxValue = 255.0; // 高于阈值的像素值
int adaptiveMethod = cv::ADAPTIVE_THRESH_MEAN_C; // 自适应方法
int thresholdType = cv::THRESH_BINARY; // 阈值类型
double C = 2.0; // 从均值中减去的常数
// 应用自适应阈值二值化
cv::adaptiveThreshold(srcImage, dstImage, maxValue, adaptiveMethod, thresholdType, blockSize, C);
// 显示原始图像和处理后的图像
cv::imshow("Original Image", srcImage);
cv::imshow("Adaptive Threshold Image", dstImage);
cv::waitKey(0);
return 0;
}