19,468
社区成员
发帖
与我相关
我的任务
分享
// TODO: Add your command handler code here
int i,j,mod;
unsigned char* pixel;
unsigned char* pixel_out;
CvMat *pMat = cvCreateMatHeader(32, 32, CV_8UC1);
IplImage*src=workImg;
IplImage*image=cvCloneImage(src);
int h=src->height;
int w=src->width;
int *pix=new int[h*w];
int *pixout=new int[h*w];
//取出原图形各点像素值
for(i=0;i<h;i++)
{
for(j=0;j<w;j++)
{
pixel=(unsigned char*)(src->imageData+i*w+j);
pix[i*w+j]=*(pixel);
}
}
int col,ii,jj;
int count=0;
for(i=16;i<h-16;i++)
{
for(j=16;j<w-16;j++)
{
//提取感兴趣区域
cvGetSubRect(src,pMat,cvRect(i-16,j-16,32,32));
CvScalar mean,std_dev;
cvAvgSdv(pMat,&mean,&std_dev,NULL); //得到均值和标准差
double ss=mean.val[0]*120/std_dev.val[0];
if( pix[i*w+j] >ss)
{
pixout[i*w+j]=255;
}
else
{
pixout[i*w+j]=0;
}
}
}
//得到二值化输出图像
for(i=0;i<h;i++)
{
for(j=0;j<w;j++)
{
mod=pixout[i*w+j];
pixel_out=(unsigned char*)(image->imageData+i*w+j);
*(pixel_out)=(BYTE)mod;
}
}
cvNamedWindow("二值图像",CV_WINDOW_AUTOSIZE);
cvFlip(image);
cvShowImage("二值图像",image);
cvWaitKey(0);
cvDestroyAllWindows();
cvFlip(image);
m_dibFlag=imageReplace(image,&workImg);
Invalidate();