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

OpenCV第七讲:阈值的作用

阈值可以被视作最简单的图像分割方法。利用阈值进行分割的方法是基于图像中物体和背景之间的灰度差异来实现的。

1. 阈值化操作

  • 固定阈值操作

    Threshold() 函数

  • 自适应阈值操作

    adaptiveThreshold()函数

  • 源代码分析

		/***************************************************************************
		 * double threshold( InputArray src, OutputArray dst,
                               	double thresh, double maxval, int type );
                               	
		 * void adaptiveThreshold( InputArray src, OutputArray dst,
				                     double maxValue, int adaptiveMethod,
				                     int thresholdType, int blockSize, double C );
		 * 
		 adaptiveMethod() :  自适应阈值的方法
		 threshold(): 固定阈值法
		 
		 * adaptiveMethod:
		 * enum AdaptiveThresholdTypes {
		    ADAPTIVE_THRESH_MEAN_C     = 0,
		    ADAPTIVE_THRESH_GAUSSIAN_C = 1
			};
		 * 
		 * thresholdType:
		 * enum ThresholdTypes {
		    THRESH_BINARY     = 0, //	二值阈值化
		    THRESH_BINARY_INV = 1, //	二值阈值化并反转
		    THRESH_TRUNC      = 2, //	截断阈值化
		    THRESH_TOZERO     = 3, //	超过阈值被置0
		    THRESH_TOZERO_INV = 4, //	低于阈值被置0
		    THRESH_MASK       = 7,
		    THRESH_OTSU       = 8, //
		    THRESH_TRIANGLE   = 16 //
		};
		 ****************************************************************************/

2. 程序测试

  • 程序源码
		#include <opencv2/opencv.hpp>
		#define WINDOW_NAME "Threshold"

		using namespace cv;

		int m_ThresholdType = 0;
		int m_ThresholdMethod = 0;
		int m_ThresholdValues = 50;

		Mat img, sholdImage;

		void on_Threshold(int, void*);
		int main(int argc, char** argv)
		{
			if(! argc ==2)
			{
				std::cerr<<"please run ./Binary ../cfg/timg2.jpeg \n";
			}
	
			string filename = argv[1];
			Mat srcImage = imread(filename,1);
			imshow("srcImage", srcImage);
			waitKey(1);
			namedWindow(WINDOW_NAME, 1);
	
			srcImage.copyTo(img);
			createTrackbar("ThresholdMethod", WINDOW_NAME, &m_ThresholdMethod, 1, on_Threshold);
			createTrackbar("ThresholdType", WINDOW_NAME, &m_ThresholdType, 1, on_Threshold);
		// 	createTrackbar("ThresholdValues", WINDOW_NAME, &m_ThresholdValues, 255, on_Threshold());
	
			on_Threshold(0, 0);

			while(1)
			{
				int key;
				key = waitKey(10);
				if((char)key == 27)
				{
					break;
				}
			
			}
		}
		//cv::ThresholdTypes;
		void on_Threshold(int, void*)
		{
			if(img.channels() == 3)
			{
				cvtColor(img, img, COLOR_BGR2GRAY);
			}
			adaptiveThreshold(img, sholdImage, 255, m_ThresholdMethod, m_ThresholdType, 3, 3.0);
	
			imshow(WINDOW_NAME, sholdImage);
	}
  • 测试结果

在这里插入图片描述

相关文章:

  • OpenCV第八讲:图像变换之边缘检测(Canny+Sobel算子)
  • V-SLAM 回环检测与后端优化重读
  • OpenCV第九讲:图像变换之边缘检测(Laplacian +Scharr 算子)
  • OpenCV第十讲:图像几何形状识别之霍夫变换
  • OpenCV 第十一讲: 重映射、仿射变换、直方图均衡化
  • OpenCV第十二讲:角点检测与亚像素精度
  • OpenCV第十三讲:SURF特征点的检测与匹配详解
  • OpenCV第十四讲: Fast特征点与ORB特征点原理详解
  • DAVIS第一课: 事件相机的工作原理和相关核心功能简介
  • DAVIS第二课:基于事件相机的视觉里程计
  • Rtab-Map学习之rtabmap_ros源代码剖析
  • DAVIS前言:事件相机资料调研
  • DAVIS第三课: 基于事件相机的光流法计算
  • CUDA学习第一天: 基础概念扫盲
  • CUDA学习第二天: GPU核心与SM核心组件
  • 【RocksDB】TransactionDB源码分析
  • Cumulo 的 ClojureScript 模块已经成型
  • JDK 6和JDK 7中的substring()方法
  • leetcode-27. Remove Element
  • leetcode386. Lexicographical Numbers
  • python3 使用 asyncio 代替线程
  • text-decoration与color属性
  • vue学习系列(二)vue-cli
  • Vultr 教程目录
  • WordPress 获取当前文章下的所有附件/获取指定ID文章的附件(图片、文件、视频)...
  • 阿里中间件开源组件:Sentinel 0.2.0正式发布
  • 基于 Ueditor 的现代化编辑器 Neditor 1.5.4 发布
  • ------- 计算机网络基础
  • 那些年我们用过的显示性能指标
  • 融云开发漫谈:你是否了解Go语言并发编程的第一要义?
  • 事件委托的小应用
  • SAP CRM里Lead通过工作流自动创建Opportunity的原理讲解 ...
  • (01)ORB-SLAM2源码无死角解析-(66) BA优化(g2o)→闭环线程:Optimizer::GlobalBundleAdjustemnt→全局优化
  • (09)Hive——CTE 公共表达式
  • (day 2)JavaScript学习笔记(基础之变量、常量和注释)
  • (ZT)北大教授朱青生给学生的一封信:大学,更是一个科学的保证
  • (待修改)PyG安装步骤
  • (更新)A股上市公司华证ESG评级得分稳健性校验ESG得分年均值中位数(2009-2023年.12)
  • (七)Java对象在Hibernate持久化层的状态
  • (企业 / 公司项目)前端使用pingyin-pro将汉字转成拼音
  • (十)DDRC架构组成、效率Efficiency及功能实现
  • (算法)求1到1亿间的质数或素数
  • ***php进行支付宝开发中return_url和notify_url的区别分析
  • **登录+JWT+异常处理+拦截器+ThreadLocal-开发思想与代码实现**
  • . Flume面试题
  • ../depcomp: line 571: exec: g++: not found
  • .[backups@airmail.cc].faust勒索病毒的最新威胁:如何恢复您的数据?
  • .apk文件,IIS不支持下载解决
  • .NET Framework与.NET Framework SDK有什么不同?
  • .NET 中让 Task 支持带超时的异步等待
  • /etc/skel 目录作用
  • @Transient注解
  • [2019.3.5]BZOJ1934 [Shoi2007]Vote 善意的投票
  • [⑧ADRV902x]: Digital Pre-Distortion (DPD)学习笔记
  • [ARC066F]Contest with Drinks Hard