Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036 #include <jsk_perception/add_mask_image.h>
00037 #include <boost/assign.hpp>
00038 #include <jsk_topic_tools/log_utils.h>
00039 #include <opencv2/opencv.hpp>
00040 #include <cv_bridge/cv_bridge.h>
00041 #include <sensor_msgs/image_encodings.h>
00042
00043 namespace jsk_perception
00044 {
00045 void AddMaskImage::onInit()
00046 {
00047 DiagnosticNodelet::onInit();
00048 pnh_->param("approximate_sync", approximate_sync_, false);
00049 pub_ = advertise<sensor_msgs::Image>(
00050 *pnh_, "output", 1);
00051 onInitPostProcess();
00052 }
00053
00054 void AddMaskImage::subscribe()
00055 {
00056 sub_src1_.subscribe(*pnh_, "input/src1", 1);
00057 sub_src2_.subscribe(*pnh_, "input/src2", 1);
00058 if (approximate_sync_) {
00059 async_ = boost::make_shared<message_filters::Synchronizer<ApproxSyncPolicy> >(100);
00060 async_->connectInput(sub_src1_, sub_src2_);
00061 async_->registerCallback(boost::bind(&AddMaskImage::add, this, _1, _2));
00062 }
00063 else {
00064 sync_ = boost::make_shared<message_filters::Synchronizer<SyncPolicy> >(100);
00065 sync_->connectInput(sub_src1_, sub_src2_);
00066 sync_->registerCallback(boost::bind(&AddMaskImage::add, this, _1, _2));
00067 }
00068 ros::V_string names = boost::assign::list_of("~input/src1")("~input/src2");
00069 jsk_topic_tools::warnNoRemap(names);
00070 }
00071
00072 void AddMaskImage::unsubscribe()
00073 {
00074 sub_src1_.unsubscribe();
00075 sub_src2_.unsubscribe();
00076 }
00077
00078 void AddMaskImage::add(
00079 const sensor_msgs::Image::ConstPtr& src1_msg,
00080 const sensor_msgs::Image::ConstPtr& src2_msg)
00081 {
00082 cv::Mat src1 = cv_bridge::toCvShare(
00083 src1_msg, src1_msg->encoding)->image;
00084 cv::Mat src2 = cv_bridge::toCvShare(
00085 src2_msg, src2_msg->encoding)->image;
00086 cv::Mat result;
00087 cv::add(src1, src2, result);
00088 pub_.publish(
00089 cv_bridge::CvImage(src1_msg->header,
00090 sensor_msgs::image_encodings::MONO8,
00091 result).toImageMsg());
00092 }
00093
00094 }
00095
00096
00097 #include <pluginlib/class_list_macros.h>
00098 PLUGINLIB_EXPORT_CLASS (jsk_perception::AddMaskImage, nodelet::Nodelet);