4,497
社区成员




int main( int argc, char** argv )
{
cvNamedWindow("a", 1);
IplImage* img_8uc1 = cvLoadImage("1000.jpg", CV_LOAD_IMAGE_GRAYSCALE);
IplImage* img_edge = cvCreateImage(cvGetSize(img_8uc1), 8, 1);
IplImage* img_8uc3 = cvCreateImage(cvGetSize(img_8uc1), 8, 3);
cvThreshold(img_8uc1, img_edge, 128, 255, CV_THRESH_BINARY);
CvMemStorage* storage = cvCreateMemStorage();//采用默认大小,即:0.
CvChain* first_contour = NULL;
int Nc = cvFindContours(img_edge, storage, (CvSeq **)&first_contour, sizeof(CvChain),
CV_RETR_LIST,
CV_CHAIN_CODE///*这个是关键参数*/
);
for (CvChain* c = first_contour; c != NULL; c = (CvChain *)c->h_next)
{
//CvSeqReader reader;
CvChainPtReader reader;
int i, total = c->total;
//cvStartReadSeq((CvSeq*)c, &reader, 0);
cvStartReadChainPoints ( c, &reader );
for (i = 0; i < total; i++)
{
char code;
CV_READ_SEQ_ELEM(code, reader); printf(" %d: \n", code); //得到轮廓的Freeman链码序列
CvPoint point;
point = cvReadChainPoint( &reader );//不能将参数 1 从“CvSeqReader”转换为“CvChainPtReader *”
printf(" x=%d ;y=%d: \n", point.x, point.y);//得到链码坐标点。
}
}
printf("Finished all contours.\n");
cvCvtColor(img_8uc1, img_8uc3, CV_GRAY2BGR);
cvShowImage("a", img_8uc3 );
cvWaitKey(0);
cvReleaseMemStorage(&storage);//释放
cvDestroyWindow("a");
cvReleaseImage(&img_8uc1);
cvReleaseImage(&img_edge);
cvReleaseImage(&img_8uc3);
return 0;
}