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.
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.
-flip_mode
Name: flip_mode
TYpe: int
Default Value: 1
Variable name: flip_mode
-image_height
Name: image_height
TYpe: int
Default Value: 240
Variable name: img_height
-image_width
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.
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
The cvFlip() function flips a 2D array (i.e. an image) on the vertical axis, horizontal axis, or both axes at the same time.
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:
The specification of the component we will create is as follows:
※ 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.
Figure 1 illustrates the effects of different flip_mode settings.
Operating environment and development environment
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.
Close this Welcome screen using the close button to display the default perspective view.
Click the "Open Perspective" button in the top right and select "Other..." from the menu.
Select "RTC Builder".
Making an RTCBuilder project
First, we will make an Eclipse project for the RT-Component. From the File menu, select "New," then "Project."
In the displayed dialog, select "Other," then "RTCBuilder" (RTC ビルダ) and click "Next".
Enter a project name and click "Finish."
A project using the given name will be created and displayed in the package explorer.
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.
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.
Entering the component profile and generating code
1. Select the "Basic" (基本) tab, and enter the basic component information as below.
-Module name: Flip
-Output Project: Flip
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.
3. Select the ""Data port" (データポート) tab and enter the data port information.
-InPort Profile:
-OutPort Profile:
4. Select the "Configuration" (コンフィギュレーション) tab and enter the configuration parameters.
-flip_mode
-image_height
-image_width
5. Select the "Language/Environment" (言語・環境) tab and choose a programming language. For the Flip component, choose C++.
6. Click the "Generate code" (コード生成) button in the "Basic" tab to generate the component template.
※ 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.