Draw Different Shapes by Using OpenCV Code in Simulink
This example shows how to draw different shapes on images by using OpenCV Importer.
First import an OpenCV function into Simulink® by using the Install and Use Computer Vision Toolbox Interface for OpenCV in Simulink. The wizard creates a Simulink library that contains a subsystem and a C Caller block for the specified OpenCV function. The subsystem is then used in a preconfigured Simulink model. This subsystem accepts coordinates of a specified shape. A defined shape is then displayed on a Video Viewer.
You learn how to:
Import an OpenCV function into a Simulink library.
Use blocks from a generated library in a Simulink model.
Set Up Your C++ Compiler
To build the OpenCV libraries, identify a compatible C++ compiler for your operating system, as described in Portable C Code Generation for Functions That Use OpenCV Library. Configure the identified compiler by using the mex -setup c++ command. For more information, see Choose a C++ Compiler.
These Simulink models are available in the
This example uses the
DrawFilledCircle.slx model. In this model, the
subsystem_slwrap_drawFilledCircle subsystem resides in the
DrawCircle_Lib library. You create the
subsystem_slwrap_drawFilledCircle subsystem by using the OpenCV Importer. The subsystem accepts the
y coordinates for the center of the circle and radius as input to the subsystem. The subsystem creates a circle on an input image from the Image From File block. The output is then displayed on a Video Viewer block.
Copy Example Folder to a Writable Location
To access the path to the example folder, at the MATLAB® command line, enter:
Each subfolder contains all the supporting files required to run the example.
Before proceeding with these steps, ensure that you copy the example folder to a writable folder location and change your current working folder to
...example\DrawShapes. All your output files are saved to this folder.
Step 1: Import OpenCV Function to Create a Simulink Library
1. To start the OpenCV Importer app, click Apps on the MATLAB Toolstrip. The OpenCV import wizard opens to a Welcome page. Specify the Project name as
DrawCircle. Make sure that the project name does not contain any spaces. Click Next.
2. In Specify OpenCV Library, specify these file locations, and then click Next.
Project root folder : Specify the path of your example folder. This path is the path to the writable project folder where you have saved your example files. All your output files are saved to this folder.
Source files : Specify the path of the
.cppfile located inside your project folder as
Include files : Specify the path of the
.hppheader file located inside your project folder as
3. Analyze your library to find the functions and types for import. Once the analysis is complete, click Next. Select the
drawFilledCircle function and click Next.
4. From What to import, select the
I/O Type for
InputOutput, and other arguements as
5. In Create Simulink Library, verify the default values of OpenCV types. By default, Create a single C-caller block for the OpenCV function is selected to create a C Caller block with the subsystem.
6. Specify Default CV::Mat Output Size as
7. To create a Simulink library, click Next.
A Simulink library
DrawCircle_Lib is created from your OpenCV code. You can use any of these blocks for model simulation. In this example, the subsystem
subsystem_slwrap_drawFilledCircle is used.
Step 2: Use Generated Subsystem in Simulink Model
To use the generated subsystem
subsystem_slwrap_drawFilledCircle with the Simulink model
1. In your MATLAB Current Folder, right-click the model
DrawFilledCircle.slx and click Open from the context menu. Drag the generated subsystem to the model and connect the subsystem to the MATLAB Function blocks.
2. Double-click the subsystem and verify the parameter values.
On the Simulink Toolstrip, in the Simulation tab, click on simulate the model button. After the simulation is complete, the Video Viewer block displays the filled circle on the input image
Draw Atom on Image by Using C Caller Block
This example shows how to use a C Caller block in a Simulink model to draw an atom on an image.
drawFilledCircle OpenCV functions into Simulink by using the OpenCV Importer app. During import, select the
I/O Type for
drawFilledCircle, as shown in this graphic.
2. Once you import the functions, the
DrawCircle_Lib library is created. This Simulink library contains subsystems and the C Caller blocks required to draw an atom on an image.
Open the model
DrawAtomCcaller.slx. Drag the
slwrap_drawEllipse C Caller block from the Simulink library
drawEllipses subsystem in the model. Create three copies of the C Caller block, and then place these blocks at the four blank positions inside the
In the model, drag the
slwrap_drawFilledCircle C Caller block from the Simulink library
DrawCircle_Lib and place the block at the blank position.
3. On the Simulink Toolstrip, in the Simulation tab, click on simulate the model button. After the simulation is complete, the Video Viewer block displays the atom on a white input image.