《学习OpenCV》第八章轮廓课后题

画一个圆,求轮廓,并用矩形逼近,求周长

#include <iostream>
#include <opencv2/opencv.hpp>
#include <opencv2/highgui.hpp>

using namespace std;
using namespace cv;

#define CVX_RED   CV_RGB(0xff, 0x00, 0x00)
#define CVX_GREEN CV_RGB(0x00, 0xff, 0x00)
#define CVX_BLUE  CV_RGB(0x00, 0x00, 0xff)

int main()
{
    /*1、载入一个图像,传承灰度图*/
    const char filename[] = "/Users/linwang/Downloads/Circle/Circle.001.jpeg";
    IplImage * Img = cvLoadImage(filename,CV_LOAD_IMAGE_GRAYSCALE);
    cvShowImage("Gray", Img);
    
    /*2、二值化*/
    cvThreshold(Img, Img, 128, 255, CV_THRESH_BINARY);
    cvShowImage("D-V", Img);
    
    /*3、检测轮廓*/
    CvMemStorage * storage = cvCreateMemStorage();
    CvSeq * first_contour = NULL;
    IplImage * Img_contour = cvCloneImage(Img);
    cvFindContours(Img_contour, storage, &first_contour);
    cout<<"Total : "<<first_contour->total<<endl;
    
    /*4、绘制轮廓*/
    IplImage * Img_Show = cvCreateImage(cvGetSize(Img), 8, 3);
    cvSetZero(Img_Show);
    cvCvtColor(Img,Img_Show, CV_GRAY2BGR);
 
    for(CvSeq * c = first_contour;c!=NULL;c=c->h_next)
    {
        cvDrawContours(Img_Show, first_contour, CVX_RED, CVX_GREEN, 0,2,8);
    }
    cvShowImage("lunkuo", Img_Show);
    

    /*5、显示轮廓的点集*/
    CvSeq* seq = cvCreateSeq(CV_SEQ_ELTYPE_POINT | CV_SEQ_KIND_CURVE  | CV_SEQ_FLAG_CLOSED,sizeof(CvContour),sizeof(CvPoint),storage);
    for(CvSeq * c = first_contour;c!=NULL;c=c->h_next)
    {
        for(int i = 0 ;i<first_contour->total;i++)
        {
            CvPoint * pt = CV_GET_SEQ_ELEM(CvPoint, c, i);
            cvSeqPush(seq,pt);
        }
    }
    
    /*6、圆的拟合结果由CvBox2D构成,给出的矩形正好包围椭圆x*/
    CvBox2D  box;
    box = cvFitEllipse2(seq);
    cout<<"圆心为 : ("<<box.center.x<<","<<box.center.y<<")"<<endl;
    cout<<"width : "<<box.size.width<<endl;
    cout<<"heigfht : "<<box.size.height<<endl;
    cout<<"Angle : "<<box.angle<<endl;
    cvWaitKey(100000);
    cvReleaseImage(&Img_Show);
    cvReleaseMemStorage(&storage);
    return 1;
}


发布了192 篇原创文章 · 获赞 14 · 访问量 13万+

猜你喜欢

转载自blog.csdn.net/u011559236/article/details/78736075