一、函数定义:
void cvAdaptiveThreshold(
CvArr* src,//输入图像
CvArr* dst,//输出图像
double max_val,//最大值
int adaptive_method=CV_ADAPTIVE_THRESH_MEAN_C,//自适应阈值方法
int threshold_type=CV_THRESH_BINARY,//阈值类型
int block_size=3,//邻域大小
double param1=5//偏移量
);
自适应阈值方法adaptive_method:
CV_ADAPTIVE_THRESH_MEAN_C 加权平均
CV_ADAPTIVE_THRESH_GAUSSIAN_C 高斯加权平均
二、例程:
//WIN7+VS2012+OPENCV2.4.7
//void cvAdaptiveThreshold(
// CvArr* src,//输入图像
// CvArr* dst,//输出图像
// double max_val,//最大值
// int adaptive_method=CV_ADAPTIVE_THRESH_MEAN_C,//自适应阈值方法
// int threshold_type=CV_THRESH_BINARY,//阈值类型
// int block_size=3,//邻域大小
// double param1=5//偏移量
// );
#include<cv.h>
#include<highgui.h>
#include<stdio.h>
int main(int argc,char** argv)
{
cvNamedWindow("threshold",1);
cvNamedWindow("threshold_adp_mean",1);
cvNamedWindow("threshold_adp_gaussian",1);
//
IplImage* src=cvLoadImage(argv[1],0);
cvNamedWindow("source");
cvShowImage("source",src);
IplImage* dst=cvCreateImage(cvGetSize(src),src->depth,1);
IplImage* dst_adp=cvCreateImage(cvGetSize(src),src->depth,1);
//
cvThreshold(src,dst,100,100,CV_THRESH_BINARY);
cvShowImage("threshold",dst);
cvAdaptiveThreshold(src,dst_adp,100,
CV_ADAPTIVE_THRESH_MEAN_C);
cvShowImage("threshold_adp_mean",dst_adp);
cvAdaptiveThreshold(src,dst_adp,100,
CV_ADAPTIVE_THRESH_GAUSSIAN_C);
cvShowImage("threshold_adp_gaussian",dst_adp);
// free
cvWaitKey(0);
cvDestroyAllWindows();
cvReleaseImage(&src);
cvReleaseImage(&dst);
return 0;
}
三、运行结果
原图像灰度化 | 固定阈值 |
高斯阈值 | 平均阈值 |