Visual BasicでOpenCVを使う入門を紹介します。Windows フォームアプリの例を紹介します。
Windows フォームアプリ
Windows フォームアプリでOpenCvSharp を使用する例を紹介します。
①Visual Studio 2022 Community を起動し、[新規作成]→[プロジェクト]を選びます。
②「新しいプロジェクトの作成」画面が現れますので「Windows フォームアプリ」を選びます。
③「新しいプロジェクトを構成します」画面が現れますので「プロジェクト名」や「場所」などを指定します。
④これでプロジェクトが作成されます。このプロジェクトには、自動で生成されたフォームとソースファイルが含まれます。
自動生成されたForm1.vb を示します。
Public Class Form1 End Class
⑤NuGet を用いてOpenCvSharp を導入する方法は、Visual Basic でOpenCV①で説明した通りです。OpenCvSharp4.Windows とOpenCvSharp4.Extension をインストールする必要があります。
⑥フォームのPaint イベントに対応するメソッドを定義します。プロパティのイベントを選択し、Paint 欄をダブルクリックします。すると、Paint イベントに対応したメソッドが定義され、そのソースファイルの部分へカーソルが表示されます。
⑦Paint イベントに対応するメソッドを記述します。
以降に、最終のソースリストを示します。
Imports OpenCvSharp Imports OpenCvSharp.Extensions Public Class Form1 Private Sub Form1_Paint(sender As Object, e As PaintEventArgs) Handles MyBase.Paint Dim rows = 200, cols = 300 Dim img As New Mat(rows, cols, MatType.CV_8UC3, Scalar.Cyan) img.Line(New Point(10, 10), ' pt1 New Point(cols - 10, rows - 10), ' pt2 Scalar.Blue) ' color ClientSize = New Drawing.Size(cols, rows) Using myGraphics As Graphics = Graphics.FromHwnd(Me.Handle) Using bmp As Bitmap = Extensions.BitmapConverter.ToBitmap(img) myGraphics.DrawImage(bmp, 0, 0) End Using End Using End Sub End Class
このプログラムはImports OpenCvSharp を指定しているため、OpenCvSharp のNamespace を明示的に指定する必要はありません。ただし、OpenCvSharp と.NET でクラス名などが衝突する場合は、どちらであるか明示してください。たとえば、SizeはOpenCvSharp とSystem.Drawing の両方で定義されているため、このようなときは、どちらのSizeであるか明示しなければなりません。
フォームのPaint イベントにOpenCV 対応のコードを記述したため、フォームを表示する必要があるたびに本メソッドへ制御が渡ります。
Mat オブジェクトは、そのままではフォームに表示できません。このためMat オブジェクトを、いったんBitmap オブジェクトへ変換します。Mat オブジェクトをBitmap オブジェクトへ変換すると、さまざまなコントロールへ画像を表示することが可能となります。
本例は、Using を使用し、Bitmap オブジェクトとGraphics オブジェクトの寿命を管理しています。しかし、この程度のリソースであれば、リソースの寿命管理は.NET へ任せても構わないでしょう。このため、Using を使用せず、普通に記述しても構いません。
また、
Using bmp As Bitmap = Extensions.BitmapConverter.ToBitmap(img) myGraphics.DrawImage(bmp, 0, 0) End Using
は、
myGraphics.DrawImage(img.ToBitmap, 0, 0)
と記述しても良いでしょう。
本ブログでは、基本的にExtensions.BitmapConverter.ToBitmapメソッドを使ってMatオブジェクトをBitmapオブジェクトへ変換します。
実行例
ここまで完了すると、以降は一般的な.NET 対応のVisual Basic の Windows フォームアプリと同じです。ビルドして実行した例を示します。プログラムを起動すると、以降に示すウィンドウが現れます。
以上で完了です。