IplImage *cvThinBinary(IplImage *bin, int turn) { IplImage *thin; thin = cvCreateImage(cvGetSize(bin), IPL_DEPTH_8U, 1); cvThin(bin, thin, turn); cvReleaseImage(&bin); return thin; }
//细化函数入口 int thin(char*input) { //if(argc!=2) //{ // return 0; //} IplImage *pSrc = NULL,*pDst = NULL,*pTmp = NULL; //传入一个灰度图像 pSrc = cvLoadImage(input,CV_LOAD_IMAGE_GRAYSCALE); if(!pSrc) { return 0; } pTmp = cvCloneImage(pSrc); pDst = cvCreateImage(cvGetSize(pSrc),pSrc->depth,pSrc->nChannels); cvZero(pDst); cvThreshold(pSrc,pTmp,128,1,CV_THRESH_BINARY_INV);//做二值处理,将图像转换成0,1格式 //cvSaveImage("c://Threshold.bmp",pTmp,0); cvThin(pTmp,pDst,8);//细化,通过修改iterations参数进一步细化 cvNamedWindow("src",1); cvNamedWindow("dst",1); cvShowImage("src",pSrc); //将二值图像转换成灰度,以便显示 int i = 0,j = 0; CvSize size = cvGetSize(pDst); for(i=0; i<size.height; i++) { for(j=0; j<size.width; j++) { if(CV_IMAGE_ELEM(pDst,uchar,i,j)==1) { CV_IMAGE_ELEM(pDst,uchar,i,j) = 0; } else { CV_IMAGE_ELEM(pDst,uchar,i,j) = 255; } } } //cvSaveImage("c://thin.bmp",pDst); cvShowImage("dst",pDst); cvWaitKey(0); cvReleaseImage(&pSrc); cvReleaseImage(&pDst); cvReleaseImage(&pTmp); cvDestroyWindow("src"); cvDestroyWindow("dst"); return 0; }