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);