#include <cv.h>
#include <highgui.h>
#include <iostream>
using namespace std;
int main()
{
IplImage * srcImage=cvLoadImage("mopOpenImage.jpg");
assert(NULL!=srcImage);
IplImage * grayImage=cvCreateImage(cvGetSize(srcImage),IPL_DEPTH_8U,1);
IplImage * resultImage=cvCreateImage(cvGetSize(srcImage),IPL_DEPTH_8U,3);
IplImage * threshImage=cvCreateImage(cvGetSize(srcImage),IPL_DEPTH_8U,1);
cvCvtColor(srcImage,grayImage,CV_BGR2GRAY);
cvThreshold(grayImage,threshImage,128,255,CV_THRESH_BINARY);
CvMemStorage * storage=cvCreateMemStorage();
CvSeq * first_contour=NULL;
int nc=cvFindContours(threshImage,storage,&first_contour,sizeof(CvContour),CV_RETR_LIST);
cout<<nc<<endl;
int n=0;
cvNamedWindow("result",1);
for(CvSeq * contour=first_contour;contour!=nullptr;contour=contour->h_next)
{
//cvCvtColor(grayImage,resultImage,CV_GRAY2BGR);
cvZero(resultImage);
cvDrawContours(resultImage,contour,cvScalar(255,0,0),cvScalar(0,0,255),0,2,8);
printf("Contours #%d\n",n);
cvShowImage("result",resultImage);
printf(" %d elements:\n",contour->total);
for(int i=0;i<contour->total;i++)
{
CvPoint *p=CV_GET_SEQ_ELEM(CvPoint,contour,i);
printf(" (%d,%d)\n",p->x,p->y);
}
cvWaitKey();
n++;
}
printf("Finished all contours.\n");
cvCvtColor(grayImage,resultImage,CV_GRAY2BGR);
cvShowImage("result",resultImage);
cvWaitKey();
cvDestroyWindow("result");
cvReleaseImage(&srcImage);
cvReleaseImage(&grayImage);
cvReleaseImage(&threshImage);
cvReleaseImage(&resultImage);
return 0;
}
遍历整个轮廓
最新推荐文章于 2023-11-13 08:00:00 发布