C++OpenCV(6):图像阈值操作

🔆 文章首发于我的个人博客:欢迎大佬们来逛逛

🔆 OpenCV项目地址及源代码:点击这里


文章目录

图像阈值化

阈值又叫临界值,是指一个效应能够产生的最低值或最高值。

例如我们选择的阈值为125,则图像中高于125像素值的会变白,而低于125像素值的会变黑。做到一副图像中利用阈值分割出我们需要的物体部分

基于物体与背景之间的灰度差异 ,此分割属于像素级的分割。

因此我们应该把图像中的每一个像素点的灰度值与选取的阈值进行比较,并作出相应的判断

常见的阈值方式:

  • 二进制阈值化:大变最大,小变0
  • 反二进制阈值化:大变0,小变最大
  • 截断阈值化:大变阈值,小不变
  • 阈值化为0:大不变,小变0
  • 反阈值化为0:大变0,小不变
  • 自适应
  • OTSU
  • 三角算法

函数API:threshold

cpp 复制代码
double threshold( InputArray src, OutputArray dst,double thresh, double maxval, int type );
/*******************************************************************
*			src: 					输入图像
*			dst:					输出图像
*			thresh:					阈值的具体值
*			maxval:				 	 阈值的最大值
*			type:				 	 阈值操作类型
*********************************************************************/
//阈值操作类型
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,		//利用最大类间方差法(OTSU)求出对图像进行二值化处理的最佳阈值
    THRESH_TRIANGLE   = 16 		//三角算法选择最优阈值  
};
cpp 复制代码
void testThreshold() {
		cv::threshold(mt, saves["二进制"], 125,200, cv::THRESH_BINARY);
		cv::threshold(mt, saves["反二进制"], 125, 200, cv::THRESH_BINARY_INV);
		cv::threshold(mt, saves["截断"], 125, 200, cv::THRESH_TRUNC);
		cv::threshold(mt, saves["阈值化为0"], 125, 200, cv::THRESH_TOZERO);
		cv::threshold(mt, saves["反阈值化为0"], 125, 200, cv::THRESH_TOZERO_INV);
	}

相关推荐
学步_技术24 分钟前
Python编码系列—Python组合模式:构建灵活的对象组合
开发语言·python·组合模式
o独酌o1 小时前
递归的‘浅’理解
java·开发语言
Book_熬夜!1 小时前
Python基础(六)——PyEcharts数据可视化初级版
开发语言·python·信息可视化·echarts·数据可视化
waterHBO1 小时前
R语言 基础笔记
开发语言·笔记·r语言
m0_631270401 小时前
高级c语言(五)
c语言·开发语言
Lenyiin1 小时前
《 C++ 修炼全景指南:十 》自平衡的艺术:深入了解 AVL 树的核心原理与实现
数据结构·c++·stl
2401_858286111 小时前
53.【C语言】 字符函数和字符串函数(strcmp函数)
c语言·开发语言
程序猿练习生2 小时前
C++速通LeetCode中等第5题-无重复字符的最长字串
开发语言·c++·leetcode
2401_858120262 小时前
MATLAB中的无线通信系统部署和优化工具有哪些
开发语言·matlab
MATLAB滤波2 小时前
【PSINS】基于PSINS工具箱的EKF+UKF对比程序|三维定位|组合导航|MATLAB
开发语言·matlab