将CvSeq转换为vector <cv :: point>?</cv :: point>

时间:2014-04-07 17:15:17

标签: ios opencv

我是openCV的新手。我正在为图像处理应用程序工作。我需要将CvSeq转换为vector<cv::Point>

void find_squares( IplImage* img , cv::vector<cv::vector<cv::Point>>&squares){
    IplImage* newimg = cvCreateImage(cvGetSize(img), IPL_DEPTH_8U, 1);
    IplImage* cannyimg = cvCreateImage(cvGetSize(img), IPL_DEPTH_8U, 1);
    IplImage* greyimg = cvCreateImage(cvGetSize(img), IPL_DEPTH_8U, 1);
    IplImage* testimg = cvCreateImage(cvGetSize(img), IPL_DEPTH_8U, 1);

    // convert the loaded image to a canny image
    cvCvtColor(img, greyimg, CV_BGR2GRAY);
    cvCanny(greyimg, cannyimg, 50, 150, 3);

    // necessary to convert loaded image to an image with channel depth of 1
    cvConvertImage(cannyimg, newimg);
    cvConvertImage(img, testimg);

    // allocate necessary memory to store the contours
    CvMemStorage* storage = cvCreateMemStorage(0);
    CvMemStorage* canny_storage = cvCreateMemStorage(0);

    // find the contours in both the loaded image and the canny filtered image
    cvFindContours(testimg, storage, &contours, sizeof(CvContour),
                   CV_RETR_EXTERNAL, CV_CHAIN_CODE);
    cvFindContours(newimg, canny_storage, &canny_contours, sizeof(CvContour),
                   CV_RETR_EXTERNAL, CV_CHAIN_CODE);

    // draw the contours on both the loaded image and the canny filtered image
    cvDrawContours(testimg, contours, cvScalar(255,255,255), cvScalarAll(255), 100);

     cvDrawContours( newimg, canny_contours, cvScalar(255,255,255), cvScalarAll(255),100);

}

我想将contours转换为cv::vector<cv::vector<cv::Point>>。我不知道下一步该做什么。

请给我任何想法。

1 个答案:

答案 0 :(得分:0)

你的问题的答案太长了,无法写在这里。在一本书中用了整整一章来描述CvSeq的工作原理和原因(&#34;学习OpenCV&#34; Gary Bradski和Adrian Kaehler,第8章)。

更重要的是,你现在不应该学习这一点。 C接口已被弃用,当OpenCV 3.0(目前正在开发中)将被发布时,此接口将被完全删除。这意味着使用Mat而不是IplImage *并使用没有&#39; cv&#39;名字前缀。见documentation of findContours。您的代码将如下所示:

vector<vector<cv::Point>> contours;
cv::findContours(testimg, contours, CV_RETR_EXTERNAL, CV_CHAIN_CODE);

修改(回复评论):

您的绘图功能将是:

drawContours(testimg, contours, -1, 255, CV_FILLED);

请参阅documentation of drawContours