OpenCV|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
#include "opencv2/core.hpp"
#include "opencv2/highgui.hpp"
#include "opencv2/imgproc.hpp"using namespace cv;
using namespace std;
int main()
{
cv::Mat src = https://www.it610.com/article/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;
}
测试效果 图1 灰度图
文章图片
图2 均值窗
文章图片
图3 高斯窗 该自适应阈值函数可以用来获取图像边缘特征,用mean或者gaussian都可以;设置常数C时,若其为正数,相当于窗口内求完平均值再减去C的值为阈值,这样对那些颜色类似的区域而言,假设C为5,平均值为120,中心值为119,那么阈值为115,中心值大于阈值,即该点显示为白色;反之,若C为负数,则上图中背景区域基本就是黑色了~
【OpenCV|OpenCV-自适应阈值函数cv::adaptiveThreshold】如果文章帮助到你了,可以点个赞让我知道,我会很快乐~加油!
推荐阅读
- 宽容谁
- 尽力
- 讲述,美丽聪明的海欧!
- 夜游宫|夜游宫 心语
- 画画吗()
- 艾略特的交易法则“遵循自然规律”
- 猎杀IP
- 陇上秋二|陇上秋二 罗敷媚
- 图书集合完毕
- 牛人进化+|牛人进化+ 按自己的意愿过一生