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

相关推荐
我不会编程55521 小时前
Python Cookbook-5.1 对字典排序
开发语言·数据结构·python
李少兄21 小时前
Unirest:优雅的Java HTTP客户端库
java·开发语言·http
懒羊羊大王&21 小时前
模版进阶(沉淀中)
c++
无名之逆21 小时前
Rust 开发提效神器:lombok-macros 宏库
服务器·开发语言·前端·数据库·后端·python·rust
似水এ᭄往昔21 小时前
【C语言】文件操作
c语言·开发语言
啊喜拔牙21 小时前
1. hadoop 集群的常用命令
java·大数据·开发语言·python·scala
owde21 小时前
顺序容器 -list双向链表
数据结构·c++·链表·list
xixixin_1 天前
为什么 js 对象中引用本地图片需要写 require 或 import
开发语言·前端·javascript
GalaxyPokemon1 天前
Muduo网络库实现 [九] - EventLoopThread模块
linux·服务器·c++
W_chuanqi1 天前
安装 Microsoft Visual C++ Build Tools
开发语言·c++·microsoft