このページの翻訳は最新ではありません。ここをクリックして、英語の最新版を参照してください。
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 関数 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 ブロックでは、白い入力イメージ上に原子が表示されます。