OpenCV阈值分割(六)——自适应阈值

OpenCV中的自适应阈值分割(Adaptive Thresholding)可以根据局部图像的灰度值自适应地确定阈值,从而得到更好的二值化效果。该算法主要包括以下步骤:

  1. 定义图像块大小和计算方法,即对于每个像素,都会在其周围的图像块内计算一个局部阈值。
  2. 对于每个像素,计算其所在图像块内像素灰度值的平均值(或高斯加权平均值),并将该值作为局部阈值。
  3. 将局部阈值与该像素的灰度值进行比较,若大于局部阈值则将其置为白色,否则将其置为黑色。
#include <opencv2/imgproc.hpp>
#include <opencv2/highgui.hpp>
#include <iostream>

using namespace cv;
using namespace std;

int main()
{
    // 读入图像
    Mat src = imread("test.jpg", IMREAD_GRAYSCALE);
    if (src.empty())
    {
        cout << "Cannot load image!" << endl;
        return -1;
    }

    // 自适应阈值分割
    Mat dst;
    adaptiveThreshold(src, dst, 255, ADAPTIVE_THRESH_GAUSSIAN_C, THRESH_BINARY, 11, 2);

    // 显示结果
    imshow("Source Image", src);
    imshow("Adaptive Thresholding", dst);
    waitKey();

    return 0;
}

其中,adaptiveThreshold函数的参数含义如下:

  • src:输入图像。
  • dst:输出图像,即二值化后的图像。
  • 255:输出图像的最大值,即白色像素的值。
  • ADAPTIVE_THRESH_GAUSSIAN_C:局部阈值计算方法,表示使用高斯加权平均值计算局部阈值。
  • THRESH_BINARY:二值化方法,表示将小于局部阈值的像素置为黑色,大于等于局部阈值的像素置为白色。
  • 11:图像块大小,表示局部阈值计算时考虑的像素范围。
  • 2:局部阈值计算时减去的常数,用于调整阈值大小。
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
适应阈值分割法是图像处理中常用的一种分割方法,它能够自动找到合适的阈值,将图像分割成两个部分:一部分是目标物体,另一部分是背景。在C++中,实现自适应阈值分割法的步骤如下: 1. 读入图像:使用OpenCV库中的imread函数读取图像并存储到Mat类型的变量中。 2. 灰度化:将读入的图像转换为灰度图像,使用OpenCV库中的cvtColor函数实现。 3. 计算局部阈值:定义一个窗口大小,对图像进行滑动,计算每个窗口内像素的均值和标准差,根据均值和标准差计算局部阈值。具体实现可参考下面的代码: ```c++ Mat grayImage, binaryImage; cvtColor(srcImage, grayImage, COLOR_BGR2GRAY); int blockSize = 25; double maxVal = 255; adaptiveThreshold(grayImage, binaryImage, maxVal, ADAPTIVE_THRESH_GAUSSIAN_C, THRESH_BINARY, blockSize, 0); ``` 其中,blockSize是窗口大小,maxVal是最大阈值,ADAPTIVE_THRESH_GAUSSIAN_C表示使用高斯加权平均的方法计算局部阈值,THRESH_BINARY表示二值化方法。 4. 显示结果:使用OpenCV库中的imshow函数显示分割结果。 完整的代码如下所示: ```c++ #include <opencv2/opencv.hpp> using namespace cv; int main() { Mat srcImage = imread("test.png"); if (srcImage.empty()) { return -1; } Mat grayImage, binaryImage; cvtColor(srcImage, grayImage, COLOR_BGR2GRAY); int blockSize = 25; double maxVal = 255; adaptiveThreshold(grayImage, binaryImage, maxVal, ADAPTIVE_THRESH_GAUSSIAN_C, THRESH_BINARY, blockSize, 0); imshow("srcImage", srcImage); imshow("binaryImage", binaryImage); waitKey(0); return 0; } ``` 运行结果如下图所示: ![adaptive_threshold_segmentation_result](https://img-blog.csdn.net/20180502111052361?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3lvdW5nX2Jsb2c=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/q/80)

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值