LoginSignup
5
5

More than 5 years have passed since last update.

Visual Basic.NetでOpenCV3(OpenCvSharp3)を使う

Last updated at Posted at 2018-08-16

初めに

Visual Basic.NETにおいて、OpenCV 3の環境構築手順を示します。
ここではOpenCVSharp3を使用しました。VB.NETでOpenCVを使う方法は他にも存在しますが、下記が採用の決め手です。

- Python3(Raspberry Pi上)のコードを簡単にポーティングできた
- 作者が日本の方で応援したい
- 今年に入ってからも更新されており好感を持てた
- 最初にチャレンジした環境なので原点に戻った

どうせ新規で始めるなら、今後の機能追加がないOpenCV 2ベースよりも3で統一することをお勧めします。小職は検索キーが的を射ていなかったためか、いろいろなSiteの内容を試しているうちに2と3の内容がごっちゃになってはまりました。

ここに集まる皆さんにとっては何を今更とお思いでしょう。
2か月程前に必要に迫られてOpenCVを.NET上で動かす方法を調べ始めたのですが、ほとんどがC#向けに書かれており、それを参考にOpenCVSharpを導入、見よう見まねで記事の内容をC#→Basicに書き直してはみるものの「定義されていません」とエラーがでて途方に暮れていたのです(IplImage絡みでした)。

Prototypeを作ったRaspberry PiではCMakeを使ってBuildするなど環境構築に手間はかかったものの、OpenCV3+Python3のサンプルが容易く動作しました。それをデモったばかりに大変なことになりましたが...

作者のBlogにNuGetパッケージを公開したと書かれていた(それまではNuGetって何?状態)ことから、藁をもつかむ思いで試し、ようやくアプリが書けるところまできました。
※その記事は2013年末のものでOpenCV2です。どうやってOpenCvSharp3にたどり着いたか、今となっては思い出せません。文書は記憶のあるうちに仕上げておきましょう。

実行環境

  • Microsoft Visual Studio Community 2017 Release/15.7.6+27703.2047
    (VS2015でも動いています)
  • Microsoft .NET Framework Version 4.7.03056
  • Windows 10 Home x64
  • インターネット接続可能な状態であること

作業手順

前述の通り、VB.NETでOpenCV 3+OpenCvSharp3を使うには、NuGetで導入するだけです。

1. プロジェクトの新規作成

02_newProj作成s.png

〔Windowsデスクトップ→Winodwsフォームアプリケーション〕を選択します。ここでは名前を"tmpOpenCvSharp"としました。

2. NuGetの管理を開く

03_NuGetの管理.png

〔ソリューションエクスプローラー〕の「ソリューション'tmpOpenCvSharp'」を右クリックし、〔ソリューションのNuGetパッケージの管理〕を選択します。

3. OpenCvSharp3を検索

新規作成のソリューションでは〔インストール済み〕には何も表示されていません。〔参照〕を選択し、"opencvsharp3"と入力すると、関連ファイルが一覧表示されます。たくさん表示されて面食らいます(ちょっと前まではWithoutDllを含めて3つしか表示されなかった)。
作成者: Shimat さんの「OpenCvSharp3-AnyCPU」を選択します。
04_NuGetOrgからOpenCvSharp3を検索.png

4. インストール開始

〔インストール〕ボタンを押下します。「変更のプレビュー」が表示されるので、〔OK〕を選択するとインストールが始まります。
05_変更のPreView.png

5. インストール終了

06_Install終了.png
インストールが終了すると〔NuGet tmpOpenCvSharp〕タブの右下ペインの内容が更新されます。

- インストール済み:3.4.1.20180319  ('18/8/15現在)
- バージョン:      最新の安定版

6. 動作確認

正常にインストールされていることを確認します。
Form1.vbの先頭にImportsと記述すると、補完候補に "OpenCvSharp"が表示されます。
07_importsにOpenCVSharpが.png

サンプルプログラム

早速、好きな写真を表示してみましょう。
下記のソースを参考にしてください。フォームアプリケーションでプロジェクトを生成しているので、Form1_Load時に表示させてみます。追加のコントロールはありません。
ファイル形式は ".png" 以外のFormatにも対応しているのでいろいろ試してみてください。

Form1.vb
Imports OpenCvSharp

Public Class Form1

    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        Dim img As Mat = New Mat("./真夏ほおづえ.png")
        Cv2.ImShow("Nogi46", img)
        Cv2.WaitKey(5000)

        Cv2.DestroyWindow("Nogi46")
    End Sub

End Class

サンプルとしては、いけてないですが、

  Title Nogi46 Windowに指定画像を表示し、
  キー入力を5秒待ち、
  Nogi46 Windowを閉じる

の動作が確認できます。
指定されたファイルが見つからないという「System.IO.FileNotFoundException」が発生する場合は、tmpOpenCvSharp.exeが生成される場所に画像ファイルを置くか、ファイル名にPathを追加して下さい。

OpenCVにはVB.NETで記述するにはとても面倒なキー入力待ちetc.の関数が用意されており、気軽に記述できるのがうれしいところです。
ただ、この手のサンプルの記述はよく見かけますが、VB.NETとしては不満が残ります。それは、


  描画WindowがVisual Studioでデザインされたものではない


VB.Netのコントロールで完結させたいのです。資料を探せば見つかることかも
知れませんが... どこを探したらよいのか、未だにわかりません。

実はここでVisual Studioの補完機能に助けられました。
これについては、改めて書きたいと思います。

最後になりましたがOpenCvSharp作者のschima様、並びに関係者の皆様にお礼を申し上げます。


筆者レベル

Visual Basicのコードメンテナンスを任されて約2年。これがVSを使った初のWindowsアプリとなった。専従ではないため、コード修正依頼のたびに文法を忘れている。Classを作るのが怖くて、何でもModuleで済ませたがる。

5
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
5