UnityでOpenCVSharpを使う

UnityでOpenCVを使って何かしたいなぁというふわふわした気持ちでOpenCVSharpを導入してみました。
Android向けに何か作る予定だったのですが、OpenCVSharpをAndroidで使用することはできないっぽいです。
まぁWindows向けには使用できたので、導入の備忘録的な感じで書いておきます。

スポンサーリンク

開発環境

  • Windows10 Pro(64bit)
  • Unity 2019.4.11f1

手順

UnityでNuGetを使用できるようにする

まず、以下のunitypackageをUnityにインポートします。

A NuGet Package Manager for Unity. Contribute to GlitchEnzo/NuGetForUnity development by creating an account on GitHub.

NuGet経由でOpenCVSharpを取得する

NuGetForUnityを起動

Unityのヘッダーメニューから「NuGet」→「Manage Nuget Packages」を選択します。

OpenCVSharpのライブラリを取得

テキストフィールドに「OpenCVSharp3」を入力し、「OpenCVSharp3-AnyCPU」をインストールします。

※右上に表示されているVersionを覚えておいてください

DllNotFoundException対応

このままだと実装して起動しても「OpenCvSharpExtern.dll」が足りないと怒られるので対応します。
インポートしたOpenCVSharp3-AnyCPUのバージョンに最も近いものを以下のページから探してください。

OpenCV wrapper for .NET. Contribute to shimat/opencvsharp development by creating an account on GitHub.

今回の場合は「4.0.0.20181129」なので「4.0.0」から「OpenCvSharp-4.0.0-x64-20181130.zip」をダウンロードします。
※使用しているOSのbit数にあった方を選んでください

ダウンロードしたZipから「OpenCvSharpExtern.dll」を取り出し、「Assets/Packages/OpenCvSharp3-AnyCPU.4.0.0.20181129/lib/netstandard2.0/」に格納します。

以上でUnityへのOpenCVSharpの導入は完了です。

OpneCVSharpのドキュメントは以下を参照してください。

注意点

OpenCVSharpはあくまでもOpenCVのAPIをC#にラップしただけなので、Webカメラを使って何かをしたいという時はUnityの「WebCamTexture」ではなくOpenCVSharpの「VideoCapture」を使用する必要があります。
OpenCVSharpにはOpenCVのMATとUnityのTextureの相互変換機能がないため、OpenCVのMatオブジェクトをPNGに変換してUnityのTextureオブジェクトに読み込ませる流れになります。

最後に

Unity+AndroidでOpenCVを使用する場合はおとなしく金で解決させましょう。

Use the OpenCV for Unity from Enox Software on your next project. Find this integration tool & more on the Unity Asset Store.