Simulink における OpenCV コードを使用したさまざまな形状の描画
この例では、"OpenCV Importer" を使用して、イメージ上にさまざまな形状を描画する方法を説明します。
最初に、Computer Vision Toolbox Interface for OpenCV in Simulink のインストールと使用を使用して、OpenCV 関数を Simulink® にインポートします。ウィザードは、指定した OpenCV 関数のサブシステムと C Caller ブロックを含む Simulink ライブラリを作成します。事前構成済みの Simulink モデルでこのサブシステムを使用します。このサブシステムは、指定された形状の座標を受け取ります。定義された形状がビデオ ビューアーに表示されます。
次の方法を学びます。
OpenCV 関数を Simulink ライブラリにインポートする。
生成されたライブラリのブロックを Simulink モデルで使用する。
C++ コンパイラの設定
OpenCV ライブラリを構築するために、OpenCV ライブラリを使用する関数に対応する移植可能な C コードの生成の記載に従い、お使いのオペレーティング システムと互換性のある C++ コンパイラを特定します。mex -setup c++ コマンドを使用して、特定したコンパイラを構成します。詳細については、C++ コンパイラの選択を参照してください。
モデルの説明
以下の Simulink モデルが DrawShapes フォルダーにあります。
DrawAtom.slxDrawEllipse.slxDrawFilledCircle.slxDrawLine.slxDrawPolygon.slxDrawRook.slx
この例では DrawFilledCircle.slx モデルを使用します。このモデルでは、subsystem_slwrap_drawFilledCircle サブシステムが DrawCircle_Lib ライブラリ内にあります。OpenCV Importer を使用して、subsystem_slwrap_drawFilledCircle サブシステムを作成します。このサブシステムは、円の中心の x 座標および y 座標と半径をサブシステムへの入力として受け取ります。サブシステムは、Image From File ブロックからの入力イメージ上に円を作成します。そして、出力が Video Viewer ブロックに表示されます。

サンプル フォルダーの書き込み可能な場所へのコピー
サンプル フォルダーのパスにアクセスするには、MATLAB® コマンド ラインで以下のように入力します。
OpenCVSimulinkExamples;
各サブフォルダーには、例を実行するために必要なサポート ファイルがすべて含まれています。
以下の手順に進む前に、サンプル フォルダーを書き込み可能なフォルダーの場所にコピーし、現在の作業フォルダーを ...example\DrawShapes に変更します。出力ファイルはすべて、このフォルダーに保存されます。
手順 1: OpenCV 関数のインポートによる Simulink ライブラリの作成
1."OpenCV Importer" アプリを起動するには、MATLAB ツールストリップの [アプリ] をクリックします。OpenCV インポート ウィザードに、[Welcome] ページが表示されます。[Project name] を DrawCircle と指定します。プロジェクト名にスペースが含まれていないことを確認してください。[Next] をクリックします。
2.[Specify OpenCV Library] で以下のファイルの場所を指定し、[Next] をクリックします。
Project root folder: サンプル フォルダーのパスを指定します。このパスは、サンプル ファイルを保存した書き込み可能なプロジェクト フォルダーのパスです。出力ファイルはすべて、このフォルダーに保存されます。
Source files: プロジェクト フォルダー内にある
.cppファイルのパスとしてopencvcode.cppと指定します。Include files: プロジェクト フォルダー内にある
.hppヘッダー ファイルのパスとしてopencvcode.hppと指定します。
3.ライブラリを解析して、インポートする関数と型を特定します。解析が完了したら、[Next] をクリックします。関数 drawFilledCircle を選択し、[Next] をクリックします。
4.[What to import] で、img の [I/O Type] に [InputOutput] を選択し、その他の引数を [Input] として選択します。[Next] をクリックします。
5.[Create Simulink Library] で、OpenCV の型の既定値を確認します。既定では、[Create a single C-caller block for the OpenCV function] が選択されており、C Caller ブロックとサブシステムが作成されます。
6.[Default CV::Mat Output Size] を 384,512,3 として指定します。
7.[Next] をクリックして Simulink ライブラリを作成します。
OpenCV コードを基に、Simulink ライブラリ DrawCircle_Lib が作成されます。どのブロックでも、モデル シミュレーションに使用できます。この例では、サブシステム subsystem_slwrap_drawFilledCircle を使用します。
手順 2: 生成されたサブシステムの Simulink モデルでの使用
生成されたサブシステム subsystem_slwrap_drawFilledCircle を Simulink モデル DrawFilledCircle.slx で使用するために、次を行います。
1.MATLAB の [現在のフォルダー] にあるモデル DrawFilledCircle.slx を右クリックし、コンテキスト メニューから [開く] をクリックします。生成されたサブシステムをモデルにドラッグし、サブシステムを MATLAB Function ブロックに接続します。
2.サブシステムをダブルクリックし、パラメーター値を確認します。
Simulink ツールストリップの [シミュレーション] タブで、[モデルのシミュレート] ボタンをクリックします。シミュレーションの完了後、Video Viewer ブロックでは、入力イメージ peppers.png 上に塗りつぶされた円が表示されます。

C Caller ブロックを使用したイメージ上への原子の描画
この例では、C Caller ブロックを Simulink モデルで使用して、イメージ上に原子を描画する方法を説明します。
1."OpenCV Importer" アプリを使用して、OpenCV 関数 drawEllipse と drawFilledCircle を Simulink にインポートします。インポートするとき、drawEllipse と drawFilledCircle の I/O Type をこの図のとおりに選択します。

2.関数をインポートすると、DrawCircle_Lib ライブラリが作成されます。この Simulink ライブラリには、イメージ上に原子を描画するために必要なサブシステム ブロックと C Caller ブロックが含まれています。
モデル DrawAtomCcaller.slx を開きます。C Caller ブロック slwrap_drawEllipse を Simulink ライブラリ DrawCircle_Lib からモデルの drawEllipses サブシステムにドラッグします。C Caller ブロックのコピーを 3 つ作成し、drawEllipses サブシステム内の空いている 4 つの場所にこれらのブロックを配置します。
モデル内で、C Caller ブロック slwrap_drawFilledCircle を Simulink ライブラリ DrawCircle_Lib からドラッグし、空いている場所に配置します。

3.Simulink ツールストリップの [シミュレーション] タブで、[モデルのシミュレート] ボタンをクリックします。シミュレーションの完了後、Video Viewer ブロックでは、白い入力イメージ上に原子が表示されます。
