当前位置: 首页 > article >正文

OpenCV杂项图像变换(1)自适应阈值处理函数adaptiveThreshold()的使用

  • 操作系统:ubuntu22.04
  • OpenCV版本:OpenCV4.9
  • IDE:Visual Studio Code
  • 编程语言:C++11

算法描述

函数对数组应用自适应阈值。
该函数根据以下公式将灰度图像转换为二值图像:

  • 对于 THRESH_BINARY:
    t e x t d s t ( x , y ) = {  maxValue 如果 src ( x , y ) > T ( x , y ) 0 否则 \\text{dst}(x, y) =\begin{cases}\ \text{maxValue} & \text{如果 } \text{src}(x, y) > T(x, y) \\ 0 & \text{否则} \end{cases} textdst(x,y)={ maxValue0如果 src(x,y)>T(x,y)否则

  • 对于THRESH_BINARY_INV:
    dst ( x , y ) = { 0 如果 src ( x , y ) > T ( x , y ) maxValue 否则 \text{dst}(x, y) = \begin{cases} 0 & \text{如果 } \text{src}(x, y) > T(x, y) \\ \text{maxValue} & \text{否则} \end{cases} dst(x,y)={0maxValue如果 src(x,y)>T(x,y)否则
    其中 T ( x , y ) T(x,y) T(x,y) 是为每个像素单独计算的阈值(参见 adaptiveMethod 参数)。

adaptiveThreshold() 函数是 OpenCV 中用于实现自适应阈值处理的一种方法。这种处理方式特别适用于照明条件变化较大的场景,因为它能够根据图像局部区域的亮度自动调整阈值。

该函数可以原地处理图像

函数原型


void cv::adaptiveThreshold	
(
	InputArray 	src,
	OutputArray 	dst,
	double 	maxValue,
	int 	adaptiveMethod,
	int 	thresholdType,
	int 	blockSize,
	double 	C 
)		

参数

  • 参数src 源 8 位单通道图像。
  • 参数dst 目标图像,具有与 src 相同的大小和类型。
  • 参数maxValue 分配给满足条件的像素的非零值。
  • 参数adaptiveMethod 使用的自适应阈值算法,参见 AdaptiveThresholdTypes。使用 BORDER_REPLICATE | BORDER_ISOLATED 来处理边界。
  • 参数thresholdType 阈值类型,必须是 THRESH_BINARY 或 THRESH_BINARY_INV,参见 ThresholdTypes。
  • 参数blockSize 用于计算像素阈值的像素邻域大小:3, 5, 7 等等。
  • 参数C 从均值或加权均值中减去的常数(参见下面的详细信息)。通常它是正数,但也可能是零或负数。

代码示例


#include <opencv2/opencv.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>

using namespace cv;

int main(int argc, char** argv)
{
    // 读取图像
    Mat image = imread("/media/dingxin/data/study/OpenCV/sources/images/sun2.jpg", IMREAD_GRAYSCALE);
    
    if (image.empty()) {
        std::cerr << "Error: Could not open or find the image." << std::endl;
        return -1;
    }
    
    // 创建输出图像
    Mat binaryImage;
    
    // 应用自适应阈值处理
    adaptiveThreshold(image, binaryImage, 255, ADAPTIVE_THRESH_MEAN_C, THRESH_BINARY, 3, 2);
    
    // 显示结果
    namedWindow("Original Image", WINDOW_NORMAL);
    imshow("Original Image", image);
    
    namedWindow("Binary Image", WINDOW_NORMAL);
    imshow("Binary Image", binaryImage);
    
    waitKey(0);
    
    return 0;
}

运行结果

在这里插入图片描述


http://www.kler.cn/a/283062.html

相关文章:

  • 844.比较含退格的字符串
  • 1.7 JS性能优化
  • quartz
  • ctfshow-web入门-SSTI(web361-web368)上
  • 基于yolov8、yolov5的番茄成熟度检测识别系统(含UI界面、训练好的模型、Python代码、数据集)
  • ML 系列: 第 24 节 — 离散概率分布(泊松分布)
  • WordPress入门级防火墙推荐指南
  • vue3+ts+vite+electron+electron-store+electron-builder打包可安装包
  • uni-app启动本地开发环境,修改默认端口号
  • 抖音电商举办用户体验开放日,加强消费者交流提升服务能力
  • 泰克PCE I控制板7KK1200-3CA11 C73249-F50-L20-3
  • 基于生成对抗模型GAN蒸馏的方法FAKD及其在EdgesSRGAN中的应用
  • 揭秘:安全鞋清洗攻略!轻松应对各种鞋面材料,焕然一新就靠这几招
  • 算法练习题06:leetcode793每日温度
  • 微信小程序:点击事件(bindtap)传递参数
  • 面试官让简述一下elasticsearch
  • 图论----最小生成树讲解与相关题解
  • 开源低代码LLM编排平台Dify:可视化Agent和工作流,如何部署在自己系统中,自定义修改前后端详解
  • Oracle SYSAUX表空间使用率过高进行清理
  • #C++ 笔记三
  • 太速科技-FMC213V3-基于FMC兼容1.8V IO的Full Camera Link 输入子卡
  • 资料搜索过程样例 - 10吨电动葫芦的缆绳重量
  • 利用OpenCV根据图片识别环境的亮度
  • Linux WPA/WPA2/WPA3/IEEE 802.1X Supplicant
  • C++ 模板基础知识——类模板、变量模板与别名模板(超长纯享版)
  • 【C++】RAII思想与智能指针原理——有效避免内存泄露问题