RotateImage.cpp
Go to the documentation of this file.
1 // -*- C++ -*-
10 #include <opencv2/highgui/highgui_c.h>
11 #include <opencv2/imgproc/imgproc_c.h>
12 #include "RotateImage.h"
13 
14 // Module specification
15 // <rtc-template block="module_spec">
16 static const char* spec[] =
17  {
18  "implementation_id", "RotateImage",
19  "type_name", "RotateImage",
20  "description", "rotate image component",
21  "version", HRPSYS_PACKAGE_VERSION,
22  "vendor", "AIST",
23  "category", "example",
24  "activity_type", "DataFlowComponent",
25  "max_instance", "10",
26  "language", "C++",
27  "lang_type", "compile",
28  // Configuration variables
29  "conf.default.angle", "0.0",
30 
31  ""
32  };
33 // </rtc-template>
34 
36  : RTC::DataFlowComponentBase(manager),
37  // <rtc-template block="initializer">
38  m_originalIn("original", m_original),
39  m_rotatedOut("rotated", m_rotated),
40  // </rtc-template>
41  m_angle(1.0), m_src(NULL), m_dst(NULL),
42  dummy(0)
43 {
44 }
45 
47 {
48  if (m_src) cvReleaseImage(&m_src);
49  if (m_dst) cvReleaseImage(&m_dst);
50 
51 }
52 
53 
54 
55 RTC::ReturnCode_t RotateImage::onInitialize()
56 {
57  std::cout << m_profile.instance_name << ": onInitialize()" << std::endl;
58  // <rtc-template block="bind_config">
59  // Bind variables and configuration variable
60  bindParameter("angle", m_angle, "0.0");
61 
62  // </rtc-template>
63 
64  // Registration: InPort/OutPort/Service
65  // <rtc-template block="registration">
66  // Set InPort buffers
67  addInPort("original", m_originalIn);
68 
69  // Set OutPort buffer
70  addOutPort("rotated", m_rotatedOut);
71 
72  // Set service provider to Ports
73 
74  // Set service consumers to Ports
75 
76  // Set CORBA Service Ports
77 
78  // </rtc-template>
79 
80  //RTC::Properties& prop = getProperties();
81 
82  return RTC::RTC_OK;
83 }
84 
85 
86 
87 /*
88 RTC::ReturnCode_t RotateImage::onFinalize()
89 {
90  return RTC::RTC_OK;
91 }
92 */
93 
94 /*
95 RTC::ReturnCode_t RotateImage::onStartup(RTC::UniqueId ec_id)
96 {
97  return RTC::RTC_OK;
98 }
99 */
100 
101 /*
102 RTC::ReturnCode_t RotateImage::onShutdown(RTC::UniqueId ec_id)
103 {
104  return RTC::RTC_OK;
105 }
106 */
107 
108 RTC::ReturnCode_t RotateImage::onActivated(RTC::UniqueId ec_id)
109 {
110  std::cout << m_profile.instance_name<< ": onActivated(" << ec_id << ")" << std::endl;
111  return RTC::RTC_OK;
112 }
113 
115 {
116  std::cout << m_profile.instance_name<< ": onDeactivated(" << ec_id << ")" << std::endl;
117  return RTC::RTC_OK;
118 }
119 
120 RTC::ReturnCode_t RotateImage::onExecute(RTC::UniqueId ec_id)
121 {
122  //std::cout << m_profile.instance_name<< ": onExecute(" << ec_id << ")" << std::endl;
123  if (m_originalIn.isNew()){
124  m_originalIn.read();
125 
126  Img::ImageData& idat = m_original.data.image;
127 
128  int nchannels = idat.format == Img::CF_GRAY ? 1 : 3;
129 
130  if (m_src && (m_src->width != idat.width
131  || m_src->height != idat.height)){
132  cvReleaseImage(&m_src);
133  cvReleaseImage(&m_dst);
134  m_src = m_dst = NULL;
135  }
136  if (!m_src){
137  m_src = cvCreateImage(cvSize(idat.width, idat.height),
138  IPL_DEPTH_8U, nchannels);
139  m_dst = cvCreateImage(cvSize(idat.width, idat.height),
140  IPL_DEPTH_8U, nchannels);
141  m_rotated.data.image.width = idat.width;
142  m_rotated.data.image.height = idat.height;
143  m_rotated.data.image.format = idat.format;
144  m_rotated.data.image.raw_data.length(idat.width*idat.height*nchannels);
145  }
146 
147  memcpy(m_src->imageData, idat.raw_data.get_buffer(),
148  idat.raw_data.length());
149 
150  CvMat *rotationMat = cvCreateMat(2,3, CV_32FC1);
151  cv2DRotationMatrix(cvPoint2D32f(idat.width/2, idat.height/2),
152  m_angle*180/M_PI, 1, rotationMat);
153  cvWarpAffine(m_src, m_dst, rotationMat);
154  cvReleaseMat(&rotationMat);
155 
156  memcpy(m_rotated.data.image.raw_data.get_buffer(),
157  m_dst->imageData, m_rotated.data.image.raw_data.length());
158 
160  }
161  return RTC::RTC_OK;
162 }
163 
164 /*
165 RTC::ReturnCode_t RotateImage::onAborting(RTC::UniqueId ec_id)
166 {
167  return RTC::RTC_OK;
168 }
169 */
170 
171 /*
172 RTC::ReturnCode_t RotateImage::onError(RTC::UniqueId ec_id)
173 {
174  return RTC::RTC_OK;
175 }
176 */
177 
178 /*
179 RTC::ReturnCode_t RotateImage::onReset(RTC::UniqueId ec_id)
180 {
181  return RTC::RTC_OK;
182 }
183 */
184 
185 /*
186 RTC::ReturnCode_t RotateImage::onStateUpdate(RTC::UniqueId ec_id)
187 {
188  return RTC::RTC_OK;
189 }
190 */
191 
192 /*
193 RTC::ReturnCode_t RotateImage::onRateChanged(RTC::UniqueId ec_id)
194 {
195  return RTC::RTC_OK;
196 }
197 */
198 
199 
200 
201 extern "C"
202 {
203 
205  {
207  manager->registerFactory(profile,
208  RTC::Create<RotateImage>,
209  RTC::Delete<RotateImage>);
210  }
211 
212 };
213 
214 
ComponentProfile m_profile
png_infop png_charpp int png_charpp profile
RotateImage(RTC::Manager *manager)
Constructor.
Definition: RotateImage.cpp:35
InPort< Img::TimedCameraImage > m_originalIn
Definition: RotateImage.h:111
virtual RTC::ReturnCode_t onInitialize()
Definition: RotateImage.cpp:55
virtual RTC::ReturnCode_t onActivated(RTC::UniqueId ec_id)
Img::TimedCameraImage m_original
Definition: RotateImage.h:107
bool addOutPort(const char *name, OutPortBase &outport)
virtual RTC::ReturnCode_t onDeactivated(RTC::UniqueId ec_id)
static const char * spec[]
Definition: RotateImage.cpp:16
ExecutionContextHandle_t UniqueId
IplImage * m_dst
Definition: RotateImage.h:140
bool bindParameter(const char *param_name, VarType &var, const char *def_val, bool(*trans)(VarType &, const char *)=coil::stringTo)
virtual ~RotateImage()
Destructor.
Definition: RotateImage.cpp:46
double m_angle
Definition: RotateImage.h:139
OutPort< Img::TimedCameraImage > m_rotatedOut
Definition: RotateImage.h:119
IplImage * m_src
Definition: RotateImage.h:140
#define M_PI
Img::TimedCameraImage m_rotated
Definition: RotateImage.h:115
void RotateImageInit(RTC::Manager *manager)
virtual bool isNew()
virtual bool write(DataType &value)
rotate image component
bool addInPort(const char *name, InPortBase &inport)
bool registerFactory(coil::Properties &profile, RtcNewFunc new_func, RtcDeleteFunc delete_func)
virtual RTC::ReturnCode_t onExecute(RTC::UniqueId ec_id)


hrpsys
Author(s): AIST, Fumio Kanehiro
autogenerated on Sat Dec 17 2022 03:52:21