大津法进行图像二值化opencv
作者:互联网
int Ostu(cv::Mat &temp,int &Threshvalue)
{
int hist_size=256;
int hist_height=256;
float range[]={0,255};
float *ranges[]={range};
IplImage *src=&IplImage(temp);
CvHistogram* gray_hist=cvCreateHist(1,&hist_size,CV_HIST_ARRAY,ranges,1);
cvCalcHist(&src,gray_hist,0,0);
cvNormalizeHist(gray_hist,1.0);
int Width=src->width;
int Height=src->height;
double delta=0.0;
double U_t=0;
for(int i=0;i<256;i++)
{
U_t+=cvQueryHistValue_1D(gray_hist,i)*i;
}
double u=0,w=0;
for(int j=0;j<256;j++)
{
u+=cvQueryHistValue_1D(gray_hist,j)*j;
w+=cvQueryHistValue_1D(gray_hist,j);
double t=U_t*w-u;
double delta_tmp=t*t/(w*(1-w));
if(delta_tmp>delta)
{
delta=delta_tmp;
Threshvalue=j;
}
}
cvReleaseHist(&gray_hist);
return Threshvalue;
}
标签:gray,大津法,src,int,double,hist,opencv,delta,二值化 来源: https://blog.csdn.net/cxn511/article/details/93874914