39 #include <boost/assign.hpp> 
   40 #include <jsk_topic_tools/log_utils.h> 
   43 #include <opencv2/opencv.hpp> 
   49     DiagnosticNodelet::onInit();
 
   50     srv_ = boost::make_shared <dynamic_reconfigure::Server<Config> > (*pnh_);
 
   51     dynamic_reconfigure::Server<Config>::CallbackType 
f =
 
   53     srv_->setCallback (f);
 
   55     pub_ = advertise<sensor_msgs::Image>(*pnh_, 
"output", 1);
 
   63     jsk_topic_tools::warnNoRemap(names);
 
   72     Config &config, uint32_t level)
 
   79     const sensor_msgs::Image::ConstPtr& image_msg)
 
   81     if ((image_msg->width == 0) && (image_msg->height == 0)) {
 
   86       image_msg, image_msg->encoding);
 
   87     cv::Mat image = cv_ptr->image;
 
   89     cv::Mat reshaped_img = image.reshape(1, image.cols * image.rows);
 
   90     cv::Mat reshaped_img32f;
 
   91     reshaped_img.convertTo(reshaped_img32f, CV_32FC1, 1.0 / 255.0);
 
   93     cv::TermCriteria criteria = cv::TermCriteria(CV_TERMCRIT_EPS+CV_TERMCRIT_ITER, 10, 1.0);
 
   95     cv::kmeans(reshaped_img32f, 
n_clusters_, labels, criteria, 1, cv::KMEANS_PP_CENTERS, centers);
 
   97     cv::Mat rgb_image(image.rows, image.cols, CV_8UC3);
 
   98     cv::MatIterator_<cv::Vec3b> rgb_first = rgb_image.begin<cv::Vec3b>();
 
   99     cv::MatIterator_<cv::Vec3b> rgb_last = rgb_image.end<cv::Vec3b>();
 
  100     cv::MatConstIterator_<int> label_first = labels.begin<
int>();
 
  103     centers.convertTo(centers_u8, CV_8UC1, 255.0);
 
  104     cv::Mat centers_u8c3 = centers_u8.reshape(3);
 
  106     while ( rgb_first != rgb_last ) {
 
  107       const cv::Vec3b& rgb = centers_u8c3.ptr<cv::Vec3b>(*label_first)[0];