改进了的阈值技术,其中阈值本身就是一个变量。
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"); }
最左边为灰度图像,中间为阈值化后的图像,最右边为自适应阈值化后的图像。