一、阈值(thresh)的概念
- 首先,顾名思义,“阈”就是范围或者限制,所以,“阈值”就是某个限制的值(该值具有一定的数学含义,即“临界值”,例如车辆限高杆的高度就是一种阈值,不可超越;亦或者1.1米以下儿童不收费,超过1.1就要收费。)
- 其次,图形学中的阈值,往往指某个你想要设置的像素值。
二、阈值在图形学中的用途
图像阈值进程被用于图像分离领域,根据某个确定的阈值,将图像进行分离,从而得到感兴趣的区域。
当然基于这个思想,还可以应用于更深更高的领域,例如医学图像分析等领域。总之,其应用价值非常高。就像前一章的内容一样。
三、阈值的作用和操作
3.1 在OpenCV中可以进行的阈值操作
我们接下来用图像和函数公式来尽可能的表达其原理和功能。
注意,以下的图像中,红色实线为设置的阈值!
-
二进制模式
- 模式介绍:
- 解释:
当源图像的像素值大于阈值时,处理后的图像中这些像素点均取最新设置的最大值像素作为结果,如果源图像的像素值小于或者等于阈值,则结果图像中的该像素值为0。 - 图示:
-
处理前像素值数据:
-
处理后像素值数据:
-
- 模式介绍:
-
二进制倒置
- 模式介绍:
- 解释:
和像素二进制模式完全相反即可! 即:当源图像的像素值大于阈值时,结果图像对应的像素值为0,当源图像的像素值小于等于阈值时,结果图像对应的阈值取提前设置好的MaxValue(最大值)。 - 图示:
- 处理前像素值数据:
- 处理后像素值数据:
- 处理前像素值数据:
- 模式介绍:
-
阈值截短
- 解释:
即一句话,把所有高于阈值的像素点的值都设置为等于阈值,其余像素值不变。 - 图示:
- 处理前的图像数据:
- 处理后的图像数据:
- 处理前的图像数据:
- 解释:
-
零阈值
-
模式介绍:
-
解释:
源图像中低于或者等于阈值的像素被设置为0。 -
图示:
- 处理前的图像数据:
- 处理后的图像数据:
- 处理前的图像数据:
-
-
零阈值倒置
- 模式介绍:
- 解释:将上边0阈值的数据反过来即可,即:当源图像像素值大于阈值时,生成的图片对应像素位置的值为0;反之,保留原像素值。
- 图示:
- 处理前图像的数据:
- 处理后图像的数据:
- 处理前图像的数据:
- 模式介绍:
3.2 操作实例
3.2.1 threshold()函数介绍
- 函数原型:
double cv::threshold(
InputArray src,
OutputArray dst,
double thresh,
double maxval,
int type
)
- 参数解释:
- src : 原始图像
- dst:处理后的图像
- thresh:阈值
- maxval:像素最大值,即上文中提到的MaxValue
- type:阈值处理的方式,在这里,上文中提到的几种阈值模式由以下整数对应:
- 0: Binary ,二进制模式
- 1: Binary Inverted,二进制倒置
- 2: Threshold Truncated,阈值截短
- 3: Threshold to Zero,零阈值
- 4: Threshold to Zero Inverted,零阈值倒置
3.2.2 实例
参考源代码:示例源码
#include "opencv2/imgproc.hpp"
#include "opencv2/imgcodecs.hpp"
#include "opencv2/highgui.hpp"
using namespace cv;
int main(void)
{
Mat srcImg = imread("/home/aelx-chen/demo.jpg");
Mat grayImg;
Mat dstImg;
cvtColor(srcImg, grayImg, COLOR_BGR2GRAY);
threshold(grayImg, dstImg, 90, 255, 1);
/*
将原图像,设置阈值为90,最大阈值为255,采用二进制方式处理
*/
imshow("source image",srcImg);
imshow("gray image",grayImg);
imshow("destination image",dstImg);
waitKey(0);
return 0;
}
3.2.3 结果
文章来源:https://www.toymoban.com/news/detail-773044.html
上节课的内容(作者还是鼓励各位同学按照顺序进行学习哦):【C++的OpenCV】第八课-OpenCV图像常用操作(五):图像形态学-图像金字塔(Gaussian pyramid、Laplacian pyramid)和向上(下)采样的使用和原理文章来源地址https://www.toymoban.com/news/detail-773044.html
到了这里,关于图像形态学-阈值的概念、功能及操作(threshold()函数))【C++的OpenCV 第九课-OpenCV图像常用操作(六)】的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!