11.图像二值化(全局阈值法)

目录

        1 概念讲解

        2 API函数详解

        3 数学原理及公式

        4 代码实现

        1 概念讲解

        图像二值化是将灰度图像转换为二值图像的过程,即将每个像素点的灰度值转化为黑白两个值之一。常见的图像二值化方法包括全局阈值法、自适应阈值法等。它可以帮助我们提取出感兴趣的物体或者轮廓,去除图像中的噪声,并且方便后续的图像分析和处理。

        2 API函数详解

cv::threshold(const cv::Mat& src, cv::Mat& dst, double thresh, double maxval, int type)

        该函数用于执行图像二值化操作:

src:是输入的灰度图像。

dst:是输出的二值图像,像素值只有0和255两种取值。

thresh:是阈值,用于将灰度图像中的像素值与阈值进行比较。

maxval:是最大值,用于设置超过阈值的像素值的输出值。

type:定义了二值化的类型,可选取以下几种:

cv::THRESH_BINARY:若src(x, y) > thresh,则dst(x, y) = maxval;否则dst(x, y) = 0。

cv::THRESH_BINARY_INV:若src(x, y) > thresh,则dst(x, y) = 0;否则dst(x, y) = maxval。

cv::THRESH_TRUNC:若src(x, y) > thresh,则dst(x, y) = thresh;否则保持原像素值不变。

cv::THRESH_TOZERO:若src(x, y) > thresh,则保持原像素值不变;否则dst(x, y) = 0。

cv::THRESH_TOZERO_INV:若src(x, y) > thresh,则dst(x, y) = 0;否则保持原像素值不变。

        3 数学原理及公式

        图像二值化的数学原理是将灰度图像中的像素值与阈值进行比较,并根据比较结果确定输出图像的像素值。根据选取的二值化类型,采用不同的逻辑关系来确定像素值。

        对于cv::THRESH_BINARY类型:

dst(x, y) = (src(x, y) > thresh) ? maxval : 0

        对于cv::THRESH_BINARY_INV类型:

dst(x, y) = (src(x, y) > thresh) ? 0 : maxval

        对于cv::THRESH_TRUNC类型:

dst(x, y) = (src(x, y) > thresh) ? thresh : src(x, y)

        对于cv::THRESH_TOZERO类型:

dst(x, y) = (src(x, y) > thresh) ? src(x, y) : 0

        对于cv::THRESH_TOZERO_INV类型:

dst(x, y) = (src(x, y) > thresh) ? 0 : src(x, y)

        4 代码实现

        下面是一个示例代码,展示了如何使用OpenCV C++进行图像的二值化操作:

#include <opencv2/opencv.hpp>
#include <iostream>

int main() {
    // 读取灰度图像
    cv::Mat image = cv::imread("image.jpg", cv::IMREAD_GRAYSCALE);

    // 定义变量存储二值化结果
    cv::Mat binaryImage;

    // 执行二值化操作
    cv::threshold(image, binaryImage, 128, 255, cv::THRESH_BINARY);

    // 显示原图和二值化结果
    cv::imshow("Original Image", image);
    cv::imshow("Binary Image", binaryImage);
    cv::waitKey(0);

    return 0;
}

        在上述代码中,首先使用cv::imread()函数读取灰度图像。然后,定义变量binaryImage用于存储二值化结果。接下来,使用cv::threshold()函数对灰度图像进行二值化操作,并将结果保存在binaryImage中。最后,使用cv::imshow()函数显示原图和二值化结果,并通过cv::waitKey(0)等待用户按下键盘任意键关闭窗口。

        图像二值化可以根据不同的需求和应用场景选择合适的阈值及处理方法,以提高图像分析和处理的效果。在实际应用中,你可以根据需要调整阈值、最大值和二值化类型,以及对多通道图像进行适当的处理。确保在编译时链接OpenCV库并包含相关头文件。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

别叭叭儿—好好学

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值