Main Content

このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。

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.slx

  • DrawEllipse.slx

  • DrawFilledCircle.slx

  • DrawLine.slx

  • DrawPolygon.slx

  • DrawRook.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 関数 drawEllipsedrawFilledCircle を Simulink にインポートします。インポートするとき、drawEllipsedrawFilledCircleI/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 ブロックでは、白い入力イメージ上に原子が表示されます。

参考

|

関連するトピック