37 #include <boost/assign.hpp> 
   38 #include <jsk_topic_tools/log_utils.h> 
   39 #include <opencv2/opencv.hpp> 
   48     DiagnosticNodelet::onInit();
 
   49     srv_ = boost::make_shared<dynamic_reconfigure::Server<Config> >(*pnh_);
 
   50     typename dynamic_reconfigure::Server<Config>::CallbackType 
f =
 
   54     pub_ = advertise<jsk_recognition_msgs::RectArray>(*pnh_, 
"output", 1);
 
   62     jsk_topic_tools::warnNoRemap(names);
 
   76     const sensor_msgs::Image::ConstPtr& mask_msg)
 
   78     vital_checker_->poke();
 
   79     std::vector<cv::Point> indices;
 
   82     cv::Mat mask = cv_ptr->image;
 
   83     jsk_recognition_msgs::RectArray rects;
 
   84     rects.header = mask_msg->header;
 
   87       case jsk_perception::MaskImageToRect_Whole: {
 
   88         for (
size_t j = 0; j < mask.rows; j++) {
 
   89           for (
size_t i = 0; 
i < mask.cols; 
i++) {
 
   90             if (mask.at<uchar>(j, i) == 255) {
 
   91               indices.push_back(cv::Point(
i, j));
 
   96         if (indices.size() > 0){
 
   97           cv::Rect mask_rect = cv::boundingRect(indices);
 
   98           jsk_recognition_msgs::Rect rect;
 
  100           rect.y = mask_rect.y;
 
  101           rect.width = mask_rect.width;
 
  102           rect.height = mask_rect.height;
 
  103           rects.rects.push_back(rect);
 
  107       case jsk_perception::MaskImageToRect_External: {
 
  108         std::vector< std::vector<cv::Point> > contours;
 
  109         std::vector<cv::Vec4i> hierarchy;
 
  110         cv::findContours(mask, contours, hierarchy,
 
  111                          CV_RETR_EXTERNAL, CV_CHAIN_APPROX_SIMPLE);
 
  112         for (
size_t i = 0; 
i < contours.size(); ++
i) {
 
  114           jsk_recognition_msgs::Rect rect;
 
  117           rect.width = cv_rect.width;
 
  118           rect.height = cv_rect.height;
 
  119           rects.rects.push_back(rect);