c++图像处理-----自适应阈值操作:`cv::adaptiveThreshold()`

自适应阈值操作: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_BINARYcv::THRESH_BINARY_INV,分别表示二值化和反二值化。
  • blockSize: 邻域大小,用于计算自适应阈值。
  • C: 从均值中减去的常数,可以调整阈值的灵敏度。

使用这个函数,你可以根据图像的局部信息自动确定每个像素的阈值,从而获得更好的二值化结果。不同的参数选择会产生不同的效果,你可以根据你的具体需求进行调整。

以下是一个使用cv::adaptiveThreshold()函数的C++示例,该示例演示了如何将输入灰度图像进行自适应阈值二值化处理:

include <opencv2/opencv.hpp>
#include 

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;
}

c++图像处理-----自适应阈值操作:`cv::adaptiveThreshold()`_第1张图片

你可能感兴趣的:(#,C++视觉处理,c++,图像处理,计算机视觉)