ros-perception / opencv_apps

http://wiki.ros.org/opencv_apps
64 stars 70 forks source link

how to use opencv_apps to extract particular contour points? #94

Closed npd26 closed 5 years ago

npd26 commented 5 years ago

Hello,

I am using opencv_apps, find contours_nodelet.cpp to detect circular contour. so far I can detect circular contour by modifying that source code llike this,

/// Draw contours my trial work
      cv::Mat drawing = cv::Mat::zeros(canny_output.size(), CV_8UC3);
      cv::Point2f rect_points[4];
      cv::Rect bounding_rect;

      std::vector<cv::Point> approx;
      for (size_t i = 0; i < contours.size(); i++)
      {
        cv::approxPolyDP(cv::Mat(contours[i]), approx, cv::arcLength(cv::Mat(contours[i]), true)*0.02, true);
        cv::Scalar color = cv::Scalar(rng.uniform(0, 255), rng.uniform(0, 255), rng.uniform(0, 255));
        if(fabs(cv::contourArea(contours[i])) < 100 || !(cv::isContourConvex(approx)))
                continue;
        if(approx.size() >=6 && approx.size() <=8)

        {
        cv::drawContours(drawing, contours, (int)i, color, 2, 8, hierarchy, 0, cv::Point());
        bounding_rect = cv::boundingRect(contours[i]);
        cv::rectangle(drawing, bounding_rect, color, 1, 8, 0);
        cv::RotatedRect bounding_rect = cv::minAreaRect(cv::Mat(contours[i]));
        bounding_rect.points(rect_points);
        }

But how can I extract this 4 rect points (rect_points[4]) for further work? or how to use this points with message?

thanks.