web-dev-qa-db-ja.com

UnityでのOpenCV(EMGUCVラッパー)の統合

ご存知のように、OpenCVは、コンピュータービジョンで驚くほど強力なことを実行できる非常に便利なライブラリです。それで、Unity3dでの使用方法を理解するのに良い時間を過ごしました。多くの問題があり、ネットで検索したところ、いくつかの提案が見つかりましたが、どれもうまくいきませんでした。

  • Unity Pro4.0を使用しています
  • このバージョンのEmguCV(emgucv-windows-universal-gpu 2.4.9.1847)
  • Unityプロジェクトの私の目標は、WebプレーヤーではなくWindowsです。
16
Mohammed BOUGAA

これは私がそれを使いたいすべての人のためにしたことです:

  1. このバージョンのEmguCVをインストールすると、CでEMGUフォルダーが作成されます。
  2. このフォルダーには、「emgucv-windows-universal-gpu2.4.9.1847」という名前の単一のフォルダーがあります。
  3. 「ビンフォルダ」に移動します
  4. 「binフォルダー」から、x86フォルダー内のすべてのdll(22 dll)と、bin内のすべてのdll(12 dll:Emgu.CV、Emgu.CV.UI…。)を直接コピーする必要があります。 X64ターゲットの場合、同じことを試すことができます。これは、X64フォルダーからdllを取得することで機能すると思います。
  5. UnityプロジェクトにPluginsという名前のフォルダーを作成します(Assets-> Plugins)
  6. これら34個のdllファイルをすべてPluginsフォルダーに貼り付けます
  7. この34個のdllファイルから、「npp32_50_35」と「cudart32_50_35」をUnityエディターフォルダー(私の場合は「C:\ ProgramFiles(x86)\ Unity\Editor」)にコピーします。
  8. これで、DLLの処理は完了です。

これはそれをテストする方法です:

  1. 「picture1.jpg」を取得し、最初の200の対角ピクセルの色を白色(255,255,255)に変更してから、新しい「picture2.jpg」を保存する小さなスクリプトを作成します。これをスクリプトに入力する必要があります。 :

    using UnityEngine;
    using System.Collections;    
    using Emgu.CV;    
    using Emgu.CV.Util;    
    using Emgu.CV.UI;           
    using Emgu.CV.CvEnum;    
    using Emgu.CV.Structure;    
    using System.Runtime.InteropServices;    
    using System;    
    using System.Drawing;    
    
    Image<Bgr, byte> picture = new Image<Bgr, byte>("C:\\picture1.jpg");     
    Bgr myWhiteColor = new Bgr(255, 255, 255);    
    For (int i=0; i<200; i++)    
    {picture[i,i]= color;}    
    picture.Save("C:\\picture2.jpg"); 
    
  2. Pluginsフォルダーにさまざまなdllを追加すると、Mono Editorで自動的に参照されますが、「System.Drawing」ライブラリで問題が発生する可能性があるため、using System.Drawingを忘れないでください。また、スクリプトエディタに移動して参照する必要があります。

    MonoDevelop-Unityの場合は、左側のソリューションエクスプローラーに移動し、[参照]-> [参照の編集]->を右クリックして、左側の列でsystem.drawingを検索し、右側の列に表示されることを確認してから、[OK]を押します。

  3. また、Unity-> file-> buildsettingsのビルド設定を次のように変更することを忘れないでください。

    • Webプレーヤーの代わりにPCMacとLinux
    • ターゲット=ウィンドウ
    • アーキテクチャ= x86
    • 次に、「プレーヤー設定ボタン」を押して「新しい画面の他の設定」に移動し、Api互換性ラベルを.NET2.0サブセットではなく.NET2.0に設定します。

今のところ、スクリプトを自由にテストして、OpenCVを使用してすばらしい作業を行うことができます

PS:「npp32_50_35」と「cudart32_50_35」をエディターフォルダーに正確に含める必要がある理由はわかりませんが、それが私にとって有効な唯一の状況です。

5
jam