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

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

运行结果

在这里插入图片描述

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Study Plan For Algorithms - Part18
  • (三)Kafka离线安装 - ZooKeeper开机自启
  • 音频如何低延时回声消除与降噪篇保姆级教程
  • Java算法之希尔排序(Shell Sort)
  • 深入理解Python中的属性(Property)及其用途
  • 代码随想录day1数组/字符串总结
  • java中的Opencv:Opencv简介与开发环境部署
  • win主机整改建议
  • 深度学习100问38:什么是阿达玛乘积
  • 已经git push,但上传的文件超过100MB
  • 【软考】【多媒体应用设计师】元数据与数字对象标识码
  • 利用开源 AI 智能名片 O2O 商城系统提升饭店私域流量
  • Vue.js入门系列(十八):利用浏览器本地存储实现TodoList数据持久化
  • 【Leetcode 2283 】 判断一个数的数字计数是否等于数位的值—— 数组计数
  • sam2 安装使用笔记
  • 深入了解以太坊
  • JavaScript中的对象个人分享
  • JavaWeb(学习笔记二)
  • laravel5.5 视图共享数据
  • leetcode46 Permutation 排列组合
  • maya建模与骨骼动画快速实现人工鱼
  • MYSQL 的 IF 函数
  • MySQL常见的两种存储引擎:MyISAM与InnoDB的爱恨情仇
  • PAT A1017 优先队列
  • Redis学习笔记 - pipline(流水线、管道)
  • windows-nginx-https-本地配置
  • 百度地图API标注+时间轴组件
  • 发布国内首个无服务器容器服务,运维效率从未如此高效
  • 基于组件的设计工作流与界面抽象
  • 数据仓库的几种建模方法
  • 消息队列系列二(IOT中消息队列的应用)
  • 原生JS动态加载JS、CSS文件及代码脚本
  • 东超科技获得千万级Pre-A轮融资,投资方为中科创星 ...
  • 数据可视化之下发图实践
  • ​【经验分享】微机原理、指令判断、判断指令是否正确判断指令是否正确​
  • ​数据结构之初始二叉树(3)
  • ​一帧图像的Android之旅 :应用的首个绘制请求
  • #AngularJS#$sce.trustAsResourceUrl
  • #systemverilog# 之 event region 和 timeslot 仿真调度(十)高层次视角看仿真调度事件的发生
  • (1)Jupyter Notebook 下载及安装
  • (2009.11版)《网络管理员考试 考前冲刺预测卷及考点解析》复习重点
  • (3)(3.5) 遥测无线电区域条例
  • (echarts)echarts使用时重新加载数据之前的数据存留在图上的问题
  • (Spark3.2.0)Spark SQL 初探: 使用大数据分析2000万KF数据
  • (STM32笔记)九、RCC时钟树与时钟 第一部分
  • (webRTC、RecordRTC):navigator.mediaDevices undefined
  • (笔试题)合法字符串
  • (附源码)spring boot建达集团公司平台 毕业设计 141538
  • (六)DockerCompose安装与配置
  • (三)模仿学习-Action数据的模仿
  • (小白学Java)Java简介和基本配置
  • (转)3D模板阴影原理
  • ***汇编语言 实验16 编写包含多个功能子程序的中断例程
  • ***原理与防范
  • .mat 文件的加载与创建 矩阵变图像? ∈ Matlab 使用笔记