OpenCV + Unity3D集成

8

我是一名Unity开发者,第一次尝试使用OpenCV。我的初始目标是在Unity3D中通过OpenCV运行相机并检测blob。我对OpenCV很陌生,正在尝试将其集成到Unity3D中(在Windows 8上使用Unity 4.3.2,在Mac上使用Unity 4.2.1f)。我遵循了这个线程。但是,只要我添加一个新的C#脚本,就会出现以下错误。当我删除这个脚本时,错误就消失了(这个脚本是Unity生成的C#脚本)。

Internal compiler error. See the console log for more information. output was:
Unhandled Exception: System.Reflection.ReflectionTypeLoadException: The classes in the module cannot be loaded.
  at (wrapper managed-to-native) System.Reflection.Assembly:GetTypes (bool)
  at System.Reflection.Assembly.GetTypes () [0x00000] in <filename unknown>:0 
  at Mono.CSharp.RootNamespace.ComputeNamespaces (System.Reflection.Assembly assembly, System.Type extensionType) [0x00000] in <filename unknown>:0 
  at Mono.CSharp.RootNamespace.ComputeNamespace (Mono.CSharp.CompilerContext ctx, System.Type extensionType) [0x00000] in <filename unknown>:0 
  at Mono.CSharp.GlobalRootNamespace.ComputeNamespaces (Mono.CSharp.CompilerContext ctx) [0x00000] in <filename unknown>:0 
  at Mono.CSharp.Driver.LoadReferences () [0x00000] in <filename unknown>:0 
  at Mono.CSharp.Driver.Compile () [0x00000] in <filename unknown>:0 
  at Mono.CSharp.Driver.Main (System.String[] args) [0x00000] in <filename unknown>:0 

我在Unity和OpenCV集成方面找不到太多信息。如果您能帮我解决这个错误并指向最近的教程以了解更多信息,那将是非常好的。

提前感谢!

1个回答

12

我们最近也遇到了同样的问题,我会发布一些通用信息来解决您的问题并帮助其他人。

  1. OpenCV库和您的OpenCV项目必须编译为静态库(请参阅OpenCV作为静态库)
  2. OpenCV库和您的OpenCV项目必须为32位和64位架构编译。
  3. 编辑器中将使用32位版本(因为Unity3D编辑器仅支持32位架构),生产中将使用64位版本。
  4. 编译的OpenCV项目必须复制到Asset> Plugins文件夹中,OpenCV库必须复制到Assets文件夹中。
  5. 要在C#脚本中使用您的OpenCV项目,请按照此代码示例操作:

using UnityEngine;
using System.Collections;
using System;
using System.Runtime.InteropServices;

public class PluginImport : MonoBehaviour {
    //Lets make our calls from the Plugin
    [DllImport ("OpenCVProject")]
    private static extern int openCVFunction(); 

    void Start () {
        openCVFunction();
    }
}

注意使用using指令!

其他信息源:


谢谢@albemala!我会试一下。 - jainam
你能在Github上发布一个示例项目吗?你是如何确保相机集成与Unity兼容的? - ina
那么这里的工作流程是先构建OpenCV项目(也就是让它运行),然后构建库,最后将其添加到Unity3D中? - coernel

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接