format_controllers.hpp
Go to the documentation of this file.
1 #ifndef USB_CAM_CONTROLLERS_FORMAT_CONTROLLERS
2 #define USB_CAM_CONTROLLERS_FORMAT_CONTROLLERS
3 
4 #include <string>
5 
6 #include <cv_bridge/cv_bridge.h>
9 #include <ros/console.h>
10 #include <ros/duration.h>
11 #include <ros/node_handle.h>
12 #include <ros/time.h>
16 
17 #include <opencv2/core/core.hpp>
18 #include <opencv2/imgproc/imgproc.hpp>
19 
20 namespace usb_cam_controllers {
21 
22 template < cv::ColorConversionCodes ConversionCode, const std::string *DstEncoding >
24 public:
26 
27  virtual ~FormatController() {}
28 
29 protected:
31  ros::NodeHandle &controller_nh) {
32  width_ = controller_nh.param("image_width", 640);
33  height_ = controller_nh.param("image_height", 480);
34 
35  // init publisher for decoded images
36  publisher_ = image_transport::ImageTransport(controller_nh).advertise("image", 1);
37 
38  return true;
39  }
40 
41  virtual void startingImpl(const ros::Time &time) {
42  // nothing to do
43  }
44 
45  virtual void updateImpl(const ros::Time &time, const ros::Duration &period) {
46  // allocate output message
48  out.header.stamp = packet_iface_.getStamp();
49  out.encoding = *DstEncoding;
50 
51  // convert pixel formats
52  try {
53  cv::cvtColor(cv::Mat(height_, width_, CV_8UC(packet_iface_.getLength() / (height_ * width_)),
54  const_cast< uint8_t * >(packet_iface_.getStartAs< uint8_t >())),
55  out.image, ConversionCode);
56  } catch (const cv::Exception &ex) {
57  ROS_ERROR_STREAM(ex.what());
58  return;
59  }
60 
62  }
63 
64  virtual void stoppingImpl(const ros::Time &time) {
65  // nothing to do
66  }
67 
68 private:
70 
72 };
73 
80 
81 } // namespace usb_cam_controllers
82 
83 #endif
virtual void updateImpl(const ros::Time &time, const ros::Duration &period)
FormatController< cv::COLOR_YUV2BGR_YUYV,&sensor_msgs::image_encodings::BGR8 > YUYVController
virtual bool initImpl(usb_cam_hardware_interface::PacketInterface *hw, ros::NodeHandle &root_nh, ros::NodeHandle &controller_nh)
virtual void startingImpl(const ros::Time &time)
std::string encoding
Publisher advertise(const std::string &base_topic, uint32_t queue_size, bool latch=false)
FormatController< cv::COLOR_YUV2BGR_UYVY,&sensor_msgs::image_encodings::BGR8 > UYVYController
FormatController< cv::COLOR_RGB2BGR,&sensor_msgs::image_encodings::BGR8 > RGB24Controller
void publish(const sensor_msgs::Image &message) const
virtual void stoppingImpl(const ros::Time &time)
bool param(const std::string &param_name, T &param_val, const T &default_val) const
#define ROS_ERROR_STREAM(args)
usb_cam_hardware_interface::PacketHandle packet_iface_
sensor_msgs::ImagePtr toImageMsg() const
std_msgs::Header header


usb_cam_controllers
Author(s):
autogenerated on Tue Jul 14 2020 03:12:08