37 #include <boost/assign.hpp> 39 #include <opencv2/opencv.hpp> 47 DiagnosticNodelet::onInit();
48 pub_ = advertise<sensor_msgs::CameraInfo>(*
pnh_,
"output", 1);
57 ros::V_string names = boost::assign::list_of(
"~input")(
"~input/camera_info");
68 const sensor_msgs::CameraInfo::ConstPtr& info_msg)
76 const sensor_msgs::Image::ConstPtr& mask_msg)
82 std::vector<cv::Point> indices;
85 cv::Mat mask = cv_ptr->image;
86 for (
size_t j = 0; j < mask.rows; j++) {
87 for (
size_t i = 0; i < mask.cols; i++) {
88 if (mask.at<uchar>(j, i) == 255) {
89 indices.push_back(cv::Point(i, j));
93 cv::Rect mask_rect = cv::boundingRect(indices);
94 camera_info.roi.x_offset = mask_rect.x;
95 camera_info.roi.y_offset = mask_rect.y;
96 camera_info.roi.width = mask_rect.width;
97 camera_info.roi.height = mask_rect.height;
98 camera_info.header = mask_msg->header;
PLUGINLIB_EXPORT_CLASS(jsk_perception::MaskImageToROI, nodelet::Nodelet)
#define NODELET_ERROR(...)
ros::Subscriber sub_mask_
void publish(const boost::shared_ptr< M > &message) const
virtual void convert(const sensor_msgs::Image::ConstPtr &mask_msg)
std::vector< std::string > V_string
ros::Subscriber sub_info_
virtual void infoCallback(const sensor_msgs::CameraInfo::ConstPtr &info_msg)
CvImagePtr toCvCopy(const sensor_msgs::ImageConstPtr &source, const std::string &encoding=std::string())
sensor_msgs::CameraInfo::ConstPtr latest_camera_info_
virtual void unsubscribe()