博客
关于我
OpenCV图像处理篇之阈值操作函数
阅读量:791 次
发布时间:2023-02-23

本文共 2103 字,大约阅读时间需要 7 分钟。

OpenCV阈值操作类型

阈值操作是图像处理中常用的技术,用于将图像中的一部分区域提取或保留。OpenCV提供了多种阈值操作类型,这些操作可以通过调用threshold函数来实现。以下是常见的五种阈值操作类型及其对应的OpenCV实现方式。

阈值操作类型

  • Threshold Binary

    将大于阈值的灰度值设为最大灰度值,小于阈值的值设为0。
    OpenCV实现:threshold(gray, dst, th_val, max_BINARY_val, THRESH_BINARY);

  • Threshold Binary Inverted

    将大于阈值的灰度值设为0,大于阈值的值设为最大灰度值。
    OpenCV实现:threshold(gray, dst, th_val, max_BINARY_val, THRESH_BINARY_INV);

  • Truncate

    将大于阈值的灰度值设为阈值,小于阈值的值保持不变。
    OpenCV实现:threshold(gray, dst, th_val, max_val, THRESH_TRUNC);

  • Threshold to Zero

    将小于阈值的灰度值设为0,大于阈值的值保持不变。
    OpenCV实现:threshold(gray, dst, th_val, max_BINARY_val, THRESH_TOZERO);

  • Threshold to Zero Inverted

    将大于阈值的灰度值设为0,小于阈值的值保持不变。
    OpenCV实现:threshold(gray, dst, th_val, max_BINARY_val, THRESH_TOZERO_INV);

  • 程序分析

    以下是一个使用OpenCV进行阈值操作的简单程序示例:

    #include "cv.h"#include "highgui.h"#include "opencv2/imgproc/imgproc.hpp"using namespace std;using namespace cv;Mat src, gray, dst;const char *wnd = "Demo";int th_val = 0;int th_type = 3;const int max_val = 255;const int max_type = 4;const int max_BINARY_val = 255;static void Thresh(int, void *) {    threshold(gray, dst, th_val, max_BINARY_val, th_type);    imshow(wnd, dst);}int main(int argc, char *argv) {    if (argc < 2) {        cout << "Usage: ./threshold [file name]" << endl;        return -1;    }    // 创建滑动条    createTrackbar("Value", wnd, &th_val, max_val, Thresh);    // 读取图像    src = imread("image.jpg");    if (src.empty()) {        cout << "Error: Failed to read image." << endl;        return -1;    }    // 转换为灰度图像    cvtColor(src, gray, CV_GRAY2BGR);    // 主循环    while (true) {        if (waitKey() == 'q') {            break;        }    }    return 0;}

    关键代码解释

  • threshold函数

    threshold(src, dst,阈值,最大值,阈值类型)用于对灰度图像进行阈值操作。参数说明:

    • src:输入图像。
    • dst:输出图像。
    • 阈值:设定阈值。
    • 最大值:最大灰度值,根据阈值类型不同,可能为255或其他值。
    • 阈值类型:决定阈值操作类型,取值范围为0~4。
  • createTrackbar函数

    创建滑动条,可以实时调整阈值。
    示例:createTrackbar("Value", wnd, &th_val, max_val, Thresh);

    • wnd:窗口名称。
    • &th_val:阈值变量。
    • max_val:滑动条的最大值范围。
    • Thresh:滑动条回调函数,调整阈值后自动调用。
  • 效果展示

    通过上述程序可以看到不同阈值操作类型的效果对比。以下是使用不同阈值操作后的图像展示:

  • 阈值操作2

    将大于阈值的灰度值设为0,大于阈值的值设为最大灰度值。

  • 阈值操作3

    将大于阈值的灰度值设为阈值,小于阈值的值保持不变。

  • 通过实际图像对比可以看出,不同阈值操作类型对图像的影响显著,选择合适的阈值操作类型对后续图像处理有重要影响。

    转载地址:http://bgsfk.baihongyu.com/

    你可能感兴趣的文章
    OfficeWeb365 SaveDraw 文件上传漏洞复现
    查看>>
    office中的所有content type
    查看>>
    office之Excel 你会用 Ctrl + E 吗?
    查看>>
    Office办公软件里的“开发工具”选项卡-ChatGPT4o作答
    查看>>
    Offline Installation the .NET Framework 3.5 on Windows 8
    查看>>
    OGG初始化之使用数据库实用程序加载数据
    查看>>
    ogg参数解析
    查看>>
    ognl详解
    查看>>
    Ogre 插件系统
    查看>>
    Oil Deposits
    查看>>
    oj2894(贝尔曼福特模板)
    查看>>
    OJ4TH|Let's play a game
    查看>>
    OJ中处理超大数据的方法
    查看>>
    OJ中常见的一种presentation error解决方法
    查看>>
    OK335xS UART device registe hacking
    查看>>
    ok6410内存初始化
    查看>>
    OkDeepLink 使用教程
    查看>>
    OKHTTP
    查看>>
    Okhttp3添加拦截器后,报错,java.io.IOException: unexpected end of stream on okhttp3.Address
    查看>>
    Okhttp拦截器
    查看>>