🔆 文章首发于我的个人博客:欢迎大佬们来逛逛
🔆 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);
}