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
00037 #include "jsk_perception/gaussian_blur.h"
00038 #include <sensor_msgs/image_encodings.h>
00039 #include <cv_bridge/cv_bridge.h>
00040 #include <opencv2/opencv.hpp>
00041
00042 namespace jsk_perception
00043 {
00044 void GaussianBlur::onInit()
00045 {
00046 DiagnosticNodelet::onInit();
00047 srv_ = boost::make_shared <dynamic_reconfigure::Server<Config> > (*pnh_);
00048 dynamic_reconfigure::Server<Config>::CallbackType f =
00049 boost::bind (&GaussianBlur::configCallback, this, _1, _2);
00050 srv_->setCallback (f);
00051
00052 pub_ = advertise<sensor_msgs::Image>(*pnh_, "output", 1);
00053 }
00054
00055 void GaussianBlur::subscribe()
00056 {
00057 sub_ = pnh_->subscribe("input", 1, &GaussianBlur::apply, this);
00058 }
00059
00060 void GaussianBlur::unsubscribe()
00061 {
00062 sub_.shutdown();
00063 }
00064
00065 void GaussianBlur::configCallback(
00066 Config &config, uint32_t level)
00067 {
00068 boost::mutex::scoped_lock lock(mutex_);
00069 kernel_size_ = config.kernel_size;
00070 sigma_x_ = config.sigma_x;
00071 sigma_y_ = config.sigma_y;
00072 }
00073
00074 void GaussianBlur::apply(
00075 const sensor_msgs::Image::ConstPtr& image_msg)
00076 {
00077 if ((image_msg->width == 0) && (image_msg->height == 0)) {
00078 JSK_ROS_WARN("invalid image input");
00079 return;
00080 }
00081 cv_bridge::CvImagePtr cv_ptr = cv_bridge::toCvCopy(
00082 image_msg, image_msg->encoding);
00083 cv::Mat image = cv_ptr->image;
00084 cv::Mat applied_image;
00085 if (kernel_size_ % 2 == 1) {
00086 cv::GaussianBlur(image, applied_image, cv::Size(kernel_size_, kernel_size_), sigma_x_, sigma_y_);
00087 } else {
00088 cv::GaussianBlur(image, applied_image, cv::Size(kernel_size_+1, kernel_size_+1), sigma_x_, sigma_y_);
00089 }
00090 pub_.publish(cv_bridge::CvImage(
00091 image_msg->header,
00092 image_msg->encoding,
00093 applied_image).toImageMsg());
00094 }
00095 }
00096
00097 #include <pluginlib/class_list_macros.h>
00098 PLUGINLIB_EXPORT_CLASS (jsk_perception::GaussianBlur, nodelet::Nodelet);