2013-05-17 12 views
16

Wie Sie wissen, OpenCV ist sehr nützliche Bibliothek, die Sie erstaunliche und leistungsstarke Dinge in Computer Vision tun können. Also habe ich eine gute Zeit verbracht, um herauszufinden, wie man es in Unity3d benutzt, ich hatte viele Probleme und im Netz zu suchen, ich habe mehrere Vorschläge gefunden, aber keiner hat für mich funktioniert.OpenCV (EMGUCV Wrapper) Integration in Unity

  • Ich bin ein Unity Pro 4.0
  • Diese Version von Emgu CV (emgucv-windows-universal-gpu 2.4.9.1847)
  • Mein Ziel für die Einheit Projekt mit ist: Fenster und nicht Webplayer
+6

Es scheint, als ob Sie Ihre eigene Frage beantworten, was eine gute Sache ist. Aber Sie sollten die Frage von der Antwort trennen, indem Sie die Antwort in das Bearbeitungsfeld "Ihre Antwort" am Ende der Seite schreiben und dann können Sie sogar Ihre eigene Antwort "akzeptieren". – rold2007

Antwort

5

Dies ist, was ich für alle tat, die es nutzen wollen:

  1. Installieren sie diese Version von EmguCV, die einen Ordner EMGU in C erstellt:
  2. In diesem Ordner finden Sie einen einzelnen Ordner mit dem Namen „emgucv-windows-universal-gpu 2.4.9.1847“
  3. Go „Binärordner“ zu
  4. Vom „Binärordner“ Sie alle DLLs kopieren müssen im x86-Ordner (22 dlls), und auch diejenigen im bin direkt (12 dlls: Emgu.CV, Emgu.CV.UI ....). Für X64-Ziel können Sie das gleiche versuchen, ich denke, das wird funktionieren, indem Sie die DLLs aus dem X64-Ordner nehmen.
  5. Erstellen Sie einen Ordner in Ihrem Unity-Projekt (aktiv-> Plugins)
  6. Einfügen all dieser 34-DLLs im Plugins-Ordner
  7. Aus diesen 34 DLL-Dateien, kopieren Sie die „npp32_50_35“ und „cudart32_50_35“ genannt Plugins, Datei in den Unity-Editor-Ordner, in meinem Fall ist es "C: \ Programme (x86) \ Unity \ Editor"
  8. Sie sind fertig für die Dlls Zeug.

Dies ist, wie es zu testen:

  1. Erstellen Sie ein kleines Skript, die eine „picture1.jpg“ und ändern Sie die Farbe der ersten 200 diagonalen Pixel Farbe weiße Farbe nimmt (255,255,255) speichern und dann die neue „picture2.jpg“ das ist, was Sie in das Skript zu setzen haben:

    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. Durch die Addition der verschiedenen DLLs im Plugins-Ordner werden sie automatisch in den Mono-Editor referenziert werden, aber wahrscheinlich Sie wird ein Problem mit der Bibliothek "System.Drawing" haben, also nicht vergessen using System.Drawing; und Sie müssen auch darauf verweisen, indem Sie zu Ihrem Skript-Editor gehen.

    Wenn MonoDevelop-Unity, gehen Sie den Lösungsexplorer in der linken, klicken Sie mit der rechten Maustaste auf Refrences-> Referenzen bearbeiten-> und suchen Sie nach System.in der linken Spalte ziehen und überprüfen sie es in der rechten Spalte, um zu sehen, drücken Sie dann OK

  3. Vergessen Sie auch nicht die Build-Einstellungen in Unity-> File-> bauen Einstellungen auf diese Weise zu ändern:

    • PC, Mac und Linux statt Webplayers
    • Ziel = Fenster
    • Architektur = x86
    • Dann drücken Sie die „Player-Einstellungen Taste“, um die „in dem neuen Bildschirm anderen Einstellungen“ gehen und setzte Api Kompatibilität lavel zu .NET 2.0 anstelle von .NET 2.0-Untermenge

Für jetzt sind Sie frei Ihr Skript zu testen und zu tun großartige Arbeit OpenCV

PS mit: Ich bin mir nicht sicher, warum genau die „npp32_50_35“ und „cudart32_50_35“ haben in seine der Editor-Ordner, aber es ist die einzige Situation, die für mich funktionierte.

+0

(Posted dies so Frage zeigt als beantwortet. Wenn OP jemals zurückkommt, um es als Antwort zu posten ich bin glücklich, dies zu löschen) – jam

+0

Unbehandelte Ausnahme: System.Reflection.ReflectionTypeLoadException: Die Klassen im Modul können nicht geladen werden. Ich habe diesen Fehler gefunden –