Making an OpenCV RT-Component (Flip component)

Making an OpenCV RT-Component (Flip component)

This section describes creating an RT-Component to invert an image using the OpenCV library and VC9:
  • The cvFlip() function
  • Component outline
  • Operating and development environment
  • Generate the Flip component template
  • Implement the component activities
  • Test the component

The cvFlip() function

The cvFlip() function flips a 2D array (i.e. an image) on the vertical axis, horizontal axis, or both axes at the same time.

 void cvFlip(IplImage* src, IplImage* dst=NULL, int flip_mode=0);
 #define cvMirror cvFlip
 src       Input array
 dst       Output array. If dst is NULL, the result will be written into src.
 flip_mode Flag setting the axes to flip on.
  flip_mode = 0: Flip on the X axis (swap top and bottom)
  flip_mode > 0: Flip on the Y axis (swap left and right)
  flip_mode < 0: Flip on both axes

Component outline

The component will flip an image received by an InPort and output it on an OutPort.
The flip mode will be controlled by an RTC configuration parameter called "flip_mode." Set flip_mode as below:

  • Flip on the X axis: 0
  • Flip on the Y axis: 1
  • Flip on both axes: -1

The specification of the component we will create is as follows:

  • InPort
    • Captured image data (TimedOctetSeq)
  • OutPort
    • Flipped image data (TimedOctetSeq)
  • Configuration
    • Flip mode (int)

※ TimedOctetSeq is a data type specified in BasicDataType.idl from OpenRTM-aist.

※ octet is a CORBA IDL base type that can store and transmit any data in 8-bit format without transformation.

   struct Time
        unsigned long sec;    // sec
        unsigned long nsec;   // nano sec
   struct TimedOctetSeq
        Time tm;
        sequence<octet> data;

Figure 1 illustrates the effects of different flip_mode settings.

Figure 1. The effect of setting flip_mode in the Flip component.

Operating environment and development environment

  • Decompression tool (e.g. Lhaplus)

Generate the Flip component template

We will generate the Flip component template using RTCBuilder.

Starting RTCBuilder

Upon starting Eclipse with a new workspace, the Welcome page will be displayed.

Figure 2. Eclipse first-time startup screen.

Close this Welcome screen using the close button to display the default perspective view.

Figure 3. Changing perspective.

Click the "Open Perspective" button in the top right and select "Other..." from the menu.

Figure 4. Perspective selection.

Select "RTC Builder".

Figure 5. The RTC Builder start screen.

Making an RTCBuilder project

First, we will make an Eclipse project for the RT-Component. From the File menu, select "New," then "Project."

Figure 6. Making an RTCBuilder project, step 1.

In the displayed dialog, select "Other," then "RTCBuilder" (RTC ビルダ) and click "Next".

Figure 7. Making an RTCBuilder project, step 2.

Enter a project name and click "Finish."

Figure 8. Making an RTCBuilder project, step 3.

A project using the given name will be created and displayed in the package explorer.

Figure 9. Making an RTCBuilder project, step 4.

Within the generated project will be an RTC profile XML (RTC.xml) containing default values.

Starting the RTC Profile Editor

To open the RTC Profile Editor, click the "Open New RtcBuilder Editor" button on the toolbar, or select "Open New Builder Editor" from the File menu.

Figure 10. "Open New RtcBuilder Editor" on the toolbar.

Figure 11. "Open New Builder Editor" entry in the File menu.

Data type definition files location

It is necessary to set the location of the IDL files that define data types used by data ports and service ports.
※ This value is valid for the entire workspace, so it does not need to be set for each project created within the same workspace.

 1. Open the settings dialog by selecting "Settings" from the "Window" menu.
 2. Expand the "RtcBuilder" branch and select "Data Type."
 3. Click the "Add" button and enter values for "IDL File Directories." IDL files included with OpenRTM-aist are installed to this path by default:
      C:\Program Files\OpenRTM-aist\1.0\rtm\idl
 4. Click the "OK" button to finish.

Figure 12. Data file location settings dialog.

Entering the component profile and generating code

1. Select the "Basic" (基本) tab, and enter the basic component information as below.

-Module name: Flip
  • Module description: Flip image component
  • Module version: 1.0.0
  • Module vender: AIST
  • Module category: Category
  • Component type: STATIC
  • Component's activity type: PERIODIC
  • Component kind: DataFlowComponent
  • Number of maximum instance: 1
  • Execution type: PeriodicExecutionContext
  • Execution Rate: 1.0
    -Output Project: Flip

Figure 13. Entering basic component information.

2. Select the "Activity" (アクティビティ) tab and select the action callbacks that will be used.

For the Flip component, the onActivated(), onDeactivated() and onExecute() callbacks will be used. Check them as in Figure 14.

Figure 14. Selecting activity callbacks.

3. Select the ""Data port" (データポート) tab and enter the data port information.

-InPort Profile:
    • Port Name: original_image
    • Data Type: TimedOctetSeq
    • Var Name: image_orig
    • Disp. Position: left
      -OutPort Profile:
    • Port Name: fliped_image
    • Data Type: TimedOctetSeq
    • Var Name: image_flip
    • Disp. Position: right

Figure 15. Entering the data port information.

4. Select the "Configuration" (コンフィギュレーション) tab and enter the configuration parameters.

    • Name: flip_mode
    • TYpe: int
    • Default Value: 1
    • Variable name: flip_mode

    • Name: image_height
    • TYpe: int
    • Default Value: 240
    • Variable name: img_height

    • Name: image_width
    • TYpe: int
    • Default Value: 320
    • Variable name: img_width

Figure 16. Entering configuration parameters.

5. Select the "Language/Environment" (言語・環境) tab and choose a programming language. For the Flip component, choose C++.

Figure 17. Programming language selection

6. Click the "Generate code" (コード生成) button in the "Basic" tab to generate the component template.

Figure 18. Template generation.

※ The component template code will be generated in the currently-active Eclipse workspace directory. You can check this directory by selecting "Change workspace" from the File menu.


latest Releases : 2.0.0-RELESE

2.0.0-RELESE Download page

Number of Projects


Motion editor/Dynamics simulator


Dynamics simulator


Integrated Development Platform

AIST RTC collection

RT-Components collection by AIST


Tokyo Opensource Robotics Association


Middleware for DAQ (Data Aquisition) by KEK