OpenCV-自适应阈值函数cv::adaptiveThreshold
Posted 翟天保Steven
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了OpenCV-自适应阈值函数cv::adaptiveThreshold相关的知识,希望对你有一定的参考价值。
作者:翟天保Steven
版权声明:著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处
函数原型
void adaptiveThreshold( InputArray src, OutputArray dst,
double maxValue, int adaptiveMethod,
int thresholdType, int blockSize, double C );
参数说明
- InputArray类型的src,输入图像。
- OutputArray类型的dst,输出图像。
- double类型的maxval,阈值最大值。
- int类型的adaptiveMethod,自适应阈值算法类型。0为ADAPTIVE_THRESH_MEAN_C(均值法获取阈值),1为ADAPTIVE_THRESH_GAUSSIAN_C(高斯窗加权和获取阈值)。
- int类型的thresholdType,阈值操作的类型,0为THRESH_BINARY(标准的二值化阈值法,大于thresh的设为maxval,小于的设为0),1为THRESH_BINARY_INV(反向二值化),2为THRESH_TRUNC(截断阈值法,大于thresh的设为thresh,小于则不变),3为THRESH_TOZERO(零化阈值法,大于thresh的不变,小于则零化),4为THRESH_TOZERO_INV(反向零化),7为THRESH_MASK(没测试出来什么用法,都是黑屏),8为THRESH_OTSU(大津算法,适合双峰直方图的图像,通过分析最大的背景前景类间方差,自动调节阈值),16为THRESH_TRIANGLE(三角法,适合单峰直方图图像,建立谷底和峰顶直线,距离直线垂直距离最大的直方图位置,即阈值thresh)。
- int类型的blockSize,窗口的大小,只能为奇数。
- double类型的C,自适应阈值算法得到平均值或加权平均值后,再减的常数值。
测试代码
#include <iostream>
#include "opencv2/core.hpp"
#include "opencv2/highgui.hpp"
#include "opencv2/imgproc.hpp"
using namespace cv;
using namespace std;
int main()
{
cv::Mat src = imread("test.jpg",0);
cv::Mat th1,th2;
// 自适应阈值函数
adaptiveThreshold(src, th1, 255, ADAPTIVE_THRESH_MEAN_C, THRESH_BINARY, 7, 5);
adaptiveThreshold(src, th2,255, ADAPTIVE_THRESH_GAUSSIAN_C, THRESH_BINARY, 7, 5);
imshow("original", src);
imshow("mean", th1);
imshow("gaussian", th2);
waitKey(0);
return 0;
}
测试效果
该自适应阈值函数可以用来获取图像边缘特征,用mean或者gaussian都可以;设置常数C时,若其为正数,相当于窗口内求完平均值再减去C的值为阈值,这样对那些颜色类似的区域而言,假设C为5,平均值为120,中心值为119,那么阈值为115,中心值大于阈值,即该点显示为白色;反之,若C为负数,则上图中背景区域基本就是黑色了~
如果文章帮助到你了,可以点个赞让我知道,我会很快乐~加油!
以上是关于OpenCV-自适应阈值函数cv::adaptiveThreshold的主要内容,如果未能解决你的问题,请参考以下文章
OpenCV-自适应阈值函数cv::adaptiveThreshold
OpenCV-自适应阈值函数cv::adaptiveThreshold
利用OpenCV的函数adaptiveThreshold()实现图像的自适应阈值分割---详解函数adaptiveThreshold()