我目前正在研究我的论文(MSc Computer Science),这是一个使用与Unity3D集成的OpenCV C(用于渲染部分)的增强现实项目 . 为了将OpenCV与Unity3D集成,我将OpenCV(c)代码导出为dll,然后我在Unity3D中导入该dll以访问dll的方法等 . 此外,大学给了我一些钱购买Unity的OpenCV(它是使用OpenCV for Java在C#中实现的,我也在Unity3D中使用它 . 问题是,它不支持SURF特征提取器,这就是为什么我没有使用该资产直接将C代码实现到C#中 .
所以我想将一个帧(Mat)从Unity3D(C#)传递给C dll,然后进行一些计算,然后返回一些Mat对象,例如旋转矩阵,平移向量和相机姿势 . 最重要的是我不知道如何将Unity框架从Unity3D传递到C dll .
任何人都可以向我解释如何实现这一点,你也可以发布示例代码吗?
EDIT: 我正在使用的Unity3D资产可以在这里找到:OpenCV for Unity3D
1 回答
我刚刚找到解决方案(ohh yeahhhhhhhh):)
首先,我需要将我的C#Mat(帧)转换为字节数组 . 然后我创建了一个指针,以指向字节数组地址(这是图像数据) . 在此之后,我调用了C dll方法并将指针作为参数(以及图像的宽度和高度)传递 . 最后在C dll中,我使用C#中的字节数组重建了C Mat .
Unity3D中的代码(C#):
现在,为了使用来自C#的传递数据在C中重建图像: