Unity中的OpenCV(EMGUCV包装器)集成

Moh*_*GAA 16 opencv unity-game-engine emgucv opencvsharp

如您所知,OpenCV是一个非常有用的库,可以让您在计算机视觉中做出惊人而强大的功能.所以,我通过一个很好的时间弄清楚如何使用它在Unity3d,我有很多的问题,并在网络搜索,我发现了几个建议,但没有一个为我工作.

  • 我正在使用Unity Pro 4.0
  • 此版本的Emgu CV(emgucv-windows-universal-gpu 2.4.9.1847)
  • 我对团结项目的目标是:windows而不是web player

jam*_*jam 5

这就是我为每个想要使用它的人所做的:

  1. 安装此版本的EmguCV,在C中创建一个EMGU文件夹:
  2. 在此文件夹中,您将拥有一个名为"emgucv-windows-universal-gpu 2.4.9.1847"的文件夹
  3. 转到"bin文件夹"
  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:\ Program Files(x86)\ Unity\Editor"
  8. 你完成了Dlls的工作.

这是测试它的方法:

  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"); 
    
    Run Code Online (Sandbox Code Playgroud)
  2. 通过在Plugins文件夹中添加不同的dll,它们将在Mono Editor中自动引用,但是你可能会遇到"System.Drawing"库的问题,所以不要忘记using System.Drawing; 并且您还必须通过转到脚本编辑器来引用它.

    如果是MonoDevelop-Unity,请转到左侧的解决方案资源管理器,右键单击Refrences-> Edit references->并在左栏中搜索system.drawing并检查它是否在右栏中查看,然后按ok

  3. 另外,请不要忘记以这种方式更改Unity-> file-> build settings中的构建设置:

    • PC Mac和Linux而不是webplayer
    • 目标=窗口
    • 架构= x86
    • 然后按"播放器设置按钮"转到"新屏幕中的其他设置"并将Api Compatibility lavel设置为.NET 2.0,而不是.NET 2.0子集

现在你可以自由地测试你的脚本并使用OpenCV做很棒的工作

PS:我不确定为什么"npp32_50_35"和"cudart32_50_35"必须在Editor文件夹中,但这是唯一对我有用的情况.