ros_image_texture.h
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2009, Willow Garage, Inc.
3  * All rights reserved.
4  *
5  * Redistribution and use in source and binary forms, with or without
6  * modification, are permitted provided that the following conditions are met:
7  *
8  * * Redistributions of source code must retain the above copyright
9  * notice, this list of conditions and the following disclaimer.
10  * * Redistributions in binary form must reproduce the above copyright
11  * notice, this list of conditions and the following disclaimer in the
12  * documentation and/or other materials provided with the distribution.
13  * * Neither the name of the Willow Garage, Inc. nor the names of its
14  * contributors may be used to endorse or promote products derived from
15  * this software without specific prior written permission.
16  *
17  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
18  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
19  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
20  * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
21  * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
22  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
23  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
24  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
25  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
26  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
27  * POSSIBILITY OF SUCH DAMAGE.
28  */
29 
30 #ifndef RVIZ_ROS_IMAGE_TEXTURE_H
31 #define RVIZ_ROS_IMAGE_TEXTURE_H
32 
33 #include <sensor_msgs/Image.h>
34 
35 #include <OgreTexture.h>
36 #include <OgreImage.h>
37 #include <OgreSharedPtr.h>
38 
39 #include <boost/shared_ptr.hpp>
40 #include <boost/thread/mutex.hpp>
41 
42 #include <ros/ros.h>
43 
44 #include <stdexcept>
45 
46 namespace rviz
47 {
48 class UnsupportedImageEncoding : public std::runtime_error
49 {
50 public:
51  UnsupportedImageEncoding(const std::string& encoding)
52  : std::runtime_error("Unsupported image encoding [" + encoding + "]")
53  {
54  }
55 };
56 
58 {
59 public:
61  ~ROSImageTexture();
62 
63  void addMessage(const sensor_msgs::Image::ConstPtr& image);
64  bool update();
65  void clear();
66 
67  const Ogre::TexturePtr& getTexture()
68  {
69  return texture_;
70  }
71  const sensor_msgs::Image::ConstPtr& getImage();
72 
73  uint32_t getWidth()
74  {
75  return width_;
76  }
77  uint32_t getHeight()
78  {
79  return height_;
80  }
81 
82  // automatic range normalization
83  void setNormalizeFloatImage(bool normalize, double min = 0.0, double max = 1.0);
84  void setMedianFrames(unsigned median_frames);
85 
86 private:
87  double updateMedian(std::deque<double>& buffer, double new_value);
88 
89  template <typename T>
90  void normalize(T* image_data, size_t image_data_size, std::vector<uint8_t>& buffer);
91 
92  sensor_msgs::Image::ConstPtr current_image_;
93  boost::mutex mutex_;
94  bool new_image_;
95 
96  Ogre::TexturePtr texture_;
97  Ogre::Image empty_image_;
98 
99  uint32_t width_;
100  uint32_t height_;
101 
102  // fields for float image running median computation
104  double min_;
105  double max_;
106  unsigned median_frames_;
107  std::deque<double> min_buffer_;
108  std::deque<double> max_buffer_;
109 };
110 
111 } // namespace rviz
112 
113 #endif
const Ogre::TexturePtr & getTexture()
Ogre::TexturePtr texture_
std::deque< double > max_buffer_
sensor_msgs::Image::ConstPtr current_image_
void update(const std::string &key, const XmlRpc::XmlRpcValue &v)
double min(double a, double b)
UnsupportedImageEncoding(const std::string &encoding)
std::deque< double > min_buffer_
double max(double a, double b)


rviz
Author(s): Dave Hershberger, David Gossow, Josh Faust
autogenerated on Sat May 27 2023 02:06:25