C++:cv.threshold

发布于:2024-07-11 ⋅ 阅读:(162) ⋅ 点赞:(0)

cv::threshold 是 OpenCV 库中用于图像阈值化处理的一个非常重要的函数。这个函数通过给定的阈值将图像中的像素值划分为不同的类别,通常用于图像分割、物体检测、特征提取等任务。以下是对 cv::threshold 函数的详细介绍:

一、函数原型

double cv::threshold(InputArray src, OutputArray dst, double thresh, double maxval, int type)

二、参数说明

  1. src:输入图像,可以是8位的灰度图,也可以是32位的浮点数图像。但在实际应用中,阈值处理通常在灰度图像上进行。

  2. dst:输出图像,与输入图像具有相同的大小和类型。函数处理后的图像将存储在这里。

  3. thresh:这是用于将像素分类的阈值。在您的函数调用中,这个参数被命名为threshold。如果源图像中某个像素的灰度值大于或等于这个阈值,则目标图像中对应像素的灰度值将被设置为maxval;否则,将被设置为0。

  4. maxval:当像素值超过(或在某些阈值类型下,小于)阈值时应该赋予的新值。对于二值化操作,这个值通常是255,表示白色。

  5. type:阈值类型,决定了阈值操作的具体方式。OpenCV提供了多种阈值类型,常见的有以下几种:

    • cv::THRESH_BINARY:二值化。大于阈值的像素被设置为maxval,小于阈值的像素被设置为0。
    • cv::THRESH_BINARY_INV:反二值化。与cv::THRESH_BINARY相反,小于阈值的像素被设置为maxval,大于阈值的像素被设置为0。
    • cv::THRESH_TRUNC:截断。大于阈值的像素被设置为阈值,小于阈值的像素保持不变。
    • cv::THRESH_TOZERO:设为零。大于阈值的像素保持不变,小于阈值的像素被设置为0。
    • cv::THRESH_TOZERO_INV:反向设为零。小于阈值的像素保持不变,大于阈值的像素被设置为0。
    • cv::THRESH_OTSU 和 cv::THRESH_TRIANGLE:这两种类型用于自动计算最佳阈值,而不是使用固定的阈值。它们通常与其他阈值类型结合使用,以获取更好的分割效果。

三、返回值

函数返回实际使用的阈值。对于自动计算阈值的类型(如cv::THRESH_OTSUcv::THRESH_TRIANGLE),这个返回值可能不同于输入的thresh参数,因为它们是自动计算得到的。

四、应用示例

以下是一个使用 cv::threshold 函数进行图像二值化的简单示例:

#include <opencv2/opencv.hpp>  
  
int main() {  
    // 读取灰度图像  
    cv::Mat grayImage = cv::imread("input_image.jpg", cv::IMREAD_GRAYSCALE);  
    if (grayImage.empty()) {  
        std::cerr << "Error: Unable to load the input image." << std::endl;  
        return -1;  
    }  
  
    // 创建输出图像  
    cv::Mat binaryImage;  
  
    // 应用阈值操作,进行二值化  
    double thresholdValue = 128;  
    double maxValue = 255;  
    int thresholdType = cv::THRESH_BINARY;  
    cv::threshold(grayImage, binaryImage, thresholdValue, maxValue, thresholdType);  
  
    // 显示结果  
    cv::imshow("Original Gray Image", grayImage);  
    cv::imshow("Binary Image", binaryImage);  
    cv::waitKey(0);  
  
    return 0;  
}

在这个示例中,我们首先读取一张灰度图像,然后应用 cv::threshold 函数进行二值化处理。最后,我们显示原始灰度图像和二值化后的图像。

五、总结

cv::threshold 是 OpenCV 中用于图像阈值化处理的强大工具,它支持多种阈值类型,可以满足不同的图像处理需求。通过调整阈值和阈值类型,我们可以有效地将图像中的目标区域与背景分离开来,为后续的图像分析和处理提供便利。


网站公告

今日签到

点亮在社区的每一天
去签到