改进了的阈值技术,其中阈值本身就是一个变量。
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进行设置。
一种自适应阈值T(X,Y)在每个像素点都不同,值为计算b×b区域内的加权平均然后减去一个常数得到,b由block_size指定,常数由param1指定。cv_adaptive_thresh_mean_c方法是对区域内的所有像素加权平均。
#include <cv.h>
#include <highgui.h>
#include <math.h>
IplImage* Igray = 0;
IplImage* It = 0;
IplImage* Iat;
void main()
{
Igray = cvLoadImage("D://picutures//诗音.jpg", CV_LOAD_IMAGE_GRAYSCALE);
It = cvCreateImage(cvSize(Igray->width, Igray->height),IPL_DEPTH_8U, 1);
Iat = cvCreateImage(cvSize(Igray->width, Igray->height),IPL_DEPTH_8U, 1);
cvThreshold(Igray, It, 50, 255,CV_THRESH_BINARY);
cvAdaptiveThreshold(Igray, Iat, 255, CV_ADAPTIVE_THRESH_MEAN_C, CV_THRESH_BINARY, 3, 5);
cvNamedWindow("orignal", 1);
cvNamedWindow("threshold", 1);
cvNamedWindow("adaptiveThresh", 1);
cvShowImage("orignal", Igray);
cvShowImage("threshold", It);
cvShowImage("adaptiveThresh", Iat);
cvWaitKey(0);
cvReleaseImage(&Igray);
cvReleaseImage(&It);
cvReleaseImage(&Iat);
cvDestroyWindow("orignal");
cvDestroyWindow("threshold");
cvDestroyWindow("adaptiveThresh");
}
最左边为灰度图像,中间为阈值化后的图像,最右边为自适应阈值化后的图像。
本文来自CSDN博客:http://blog.csdn.net/cartoonface/archive/2010/11/16/6011334.aspx