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

news/2024/7/21 7:28:45 标签: c++, 图像处理, 计算机视觉

自适应阈值操作: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 <iostream>

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

在这里插入图片描述


http://www.niftyadmin.cn/n/5079872.html

相关文章

ThinPlateSpline(TPS)理论和代码

ThinPlateSpline理论和代码 TPS被广泛的应用于各类的任务中, 尤其是生物形态中应用的更多: 人脸, 动物脸等等, TPS是cubic spline的2D泛化形态. 值得注意的是, 图像处理中常用的仿射变换(Affine Transformation), 可以理解成TPS的一个特殊的变种. 暂时先整理相关资源,后面详细…

C++语言实现网络爬虫详细代码

当然&#xff01;下面是一个用C语言实现的基本网络爬虫的详细代码示例&#xff1a; #include <iostream> #include <string> #include <curl/curl.h> size_t writeCallback(void* contents, size_t size, size_t nmemb, std::string* output) {size_t totalS…

Linux[find命令]-根据路径和条件搜索指定文件并删除

一、find命令简介 find命令&#xff1a;用于根据给定的路径和条件查找相关文件或目录&#xff0c;参数灵活方便&#xff0c;且支持正则表达式&#xff0c;结合管道符后能够实现更加复杂的功能。 基本语法格式&#xff1a;find pathname -options 搜索内容 [其他选项] pathname…

wordpress的lnmp环境一键安装和手工配置

1. 使用oneinstack安装lnmp环境&#xff0c;按照"Recommend PHP 7.4 or greater and MySQL version 5.7 or MariaDB version 10.4 or greater."的wordpress官方建议配置生成安装脚本。配置后在/root/oneinstack/options.conf中可找到安装的相关目录位置和密码等。 2.…

运维大数据平台的建设与实践探索

随着企业数字化转型的推进&#xff0c;运维管理面临着前所未有的挑战和机遇。为应对日益复杂且严峻的挑战&#xff0c;数字免疫系统和智能运维等概念应运而生。数字免疫系统和智能运维作为新兴技术&#xff0c;正引领着运维管理的新趋势。数字免疫系统和智能运维都借助大数据运…

SpringCloud小项目——订单积分商城 使用Nacos、Open Feign、Gateway、Sentinel技术栈

目录 引出小项目要求创建极简数据库表订单表&#xff0c;订单明细表商品表积分表 相关微服务积分微服务产品微服务订单微服务调用积分和订单微服务 网关微服务登陆认证通过网关实现对外提供接口API走网关功能 sentinel相关使用Sentinel限流&#xff0c;流量整形Sentinel降级服务…

4+1视图与UML

目录 逻辑视图过程视图开发视图物理视图&#xff08;部署视图&#xff09;用例视图 41视图&#xff0c;即逻辑视图&#xff0c;过程视图&#xff0c;实现视图&#xff0c;部署视图&#xff0c;用例视图。 为什么不用一个视图&#xff1f; 针对多个用户&#xff0c;即终端用户&a…

代码规范问题,“static“ base class members should not be accessed via derived types

代码规范问题,“static” base class members should not be accessed via derived types 例如在使用fastjson时 LinkedHashMap days JSONObject.parseObject(JSONObject.toJSONString(data.get(CommonConstant.AQIW)),LinkedHashMap.class);这里使用了JSONObject来调用parse…