Exemplo n.º 1
0
IplImage *cvThinBinary(IplImage *bin, int turn) {
	IplImage *thin;
	thin = cvCreateImage(cvGetSize(bin), IPL_DEPTH_8U, 1);
	cvThin(bin, thin, turn);

	cvReleaseImage(&bin);

	return thin;
}
Exemplo n.º 2
0
//细化函数入口
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;
}