16

如您所知,OpenCV 是一个非常有用的库,可让您在计算机视觉领域做出惊人而强大的事情。所以我花了很长时间弄清楚如何在 Unity3d 中使用它,我遇到了很多问题,在网上搜索,我找到了一些建议,但没有一个对我有用。

  • 我正在使用 Unity Pro 4.0
  • 这个版本的 Emgu CV (emgucv-windows-universal-gpu 2.4.9.1847)
  • 我的统一项目目标是:Windows 而不是网络播放器
4

1 回答 1

5

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

  1. 安装此版本的 EmguCV,它会在 C 中创建一个文件夹 EMGU:
  2. 在此文件夹中,您将有一个名为“emgucv-windows-universal-gpu 2.4.9.1847”的文件夹</li>
  3. 转到“bin文件夹”</li>
  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”</li>
  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"); 
    
  2. 通过在 Plugins 文件夹中添加不同的 dll,它们将在 Mono 编辑器中自动引用,但您可能会遇到“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文件夹中,但这是唯一对我有用的情况。

于 2014-10-23T08:03:21.560 回答