Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/80.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将数据从Unity3D传递到C++;dll,反之亦然 我目前在研究我的论文(MSC Calcience Science),它是一个使用OpenCV C++与UNITY3D(用于渲染部分)的增强现实项目。为了将OpenCV与Unity3D集成,我将OpenCV(c++)代码导出为dll,然后在Unity3D中导入该dll以访问dll的方法等。。此外,大学给了我一些钱,让我为Unity购买OpenCV(它是用C语言实现的,使用OpenCV for Java),我也在Unity3D中使用它。问题是,它不支持Surf特征提取器,这就是为什么我没有使用C++资产直接使用C资源实现C++代码的原因。p> >我想把一个帧(Mat)从UNIDE3D(C)到C++ DLL,然后做一些计算,然后返回一些垫物体,例如旋转矩阵、平移向量和相机姿态。最重要的是,我不知道如何将垫框架从UnTy3D传递到C++ DLL。_C++_Opencv_Unity3d_Marshalling_Augmented Reality - Fatal编程技术网

将数据从Unity3D传递到C++;dll,反之亦然 我目前在研究我的论文(MSC Calcience Science),它是一个使用OpenCV C++与UNITY3D(用于渲染部分)的增强现实项目。为了将OpenCV与Unity3D集成,我将OpenCV(c++)代码导出为dll,然后在Unity3D中导入该dll以访问dll的方法等。。此外,大学给了我一些钱,让我为Unity购买OpenCV(它是用C语言实现的,使用OpenCV for Java),我也在Unity3D中使用它。问题是,它不支持Surf特征提取器,这就是为什么我没有使用C++资产直接使用C资源实现C++代码的原因。p> >我想把一个帧(Mat)从UNIDE3D(C)到C++ DLL,然后做一些计算,然后返回一些垫物体,例如旋转矩阵、平移向量和相机姿态。最重要的是,我不知道如何将垫框架从UnTy3D传递到C++ DLL。

将数据从Unity3D传递到C++;dll,反之亦然 我目前在研究我的论文(MSC Calcience Science),它是一个使用OpenCV C++与UNITY3D(用于渲染部分)的增强现实项目。为了将OpenCV与Unity3D集成,我将OpenCV(c++)代码导出为dll,然后在Unity3D中导入该dll以访问dll的方法等。。此外,大学给了我一些钱,让我为Unity购买OpenCV(它是用C语言实现的,使用OpenCV for Java),我也在Unity3D中使用它。问题是,它不支持Surf特征提取器,这就是为什么我没有使用C++资产直接使用C资源实现C++代码的原因。p> >我想把一个帧(Mat)从UNIDE3D(C)到C++ DLL,然后做一些计算,然后返回一些垫物体,例如旋转矩阵、平移向量和相机姿态。最重要的是,我不知道如何将垫框架从UnTy3D传递到C++ DLL。,c++,opencv,unity3d,marshalling,augmented-reality,C++,Opencv,Unity3d,Marshalling,Augmented Reality,有人能给我解释一下如何实现这一点吗?你也能发布一个示例代码吗 编辑:我正在使用的Unity3D资产可以在这里找到:我刚刚找到了解决方案(ohh Yeahhh):) 首先,我需要将我的C#Mat(frame)转换成一个字节数组。然后我创建了一个指针,以指向字节数组地址(即图像数据)。在此之后,我调用C++ DLL方法,并将指针作为参数传递(以及图像的宽度和高度)。最后在C++ DLL中,使用C++中的字节数组重构C++ Mat。 Unity3D(C#)中的代码: 现在,为了利用C++中的传递数据重

有人能给我解释一下如何实现这一点吗?你也能发布一个示例代码吗

编辑:我正在使用的Unity3D资产可以在这里找到:

我刚刚找到了解决方案(ohh Yeahhh):)

首先,我需要将我的C#Mat(frame)转换成一个字节数组。然后我创建了一个指针,以指向字节数组地址(即图像数据)。在此之后,我调用C++ DLL方法,并将指针作为参数传递(以及图像的宽度和高度)。最后在C++ DLL中,使用C++中的字节数组重构C++ Mat。 Unity3D(C#)中的代码:

现在,为了利用C++中的传递数据重建C++中的图像:


是的,我正在使用你提到的资产。我将编辑我的帖子并将其包括在内。我以为我不允许发布外部链接。谢天谢地,令人伤心的是,SIFT和SURF没有在该资产上实现。这就是为什么我在C++中实现了我的代码,在那里SIFT和SURF都是可用的,然后我将DLL导入UNITY3DIAL,我可以将C++ DLL与Unity结合起来,我可以调用简单的方法,比如增加两个数字,并返回结果,但是问题的关键是如何传递图像(Mat type)。从统一到C++ DLL,算法将做一些计算并将它们返回到统一。我很感激你们的帮助,但是大多数人在得到答案的时候从来不会把解决方案发布给每个人。我在这里发现了两个类似的帖子,干得不错。很好,把它贴在这里。哥们,我建议用字节数组。你可以“勾选”你自己的答案,这很酷。
        //frame is the C# Mat and byte_array our array of byes

        //to initialize the size of our byte array (image pixels * channels)
        byte_array= new byte[frame.cols () * frame.rows () * frame.channels ()];
        //copy the frame data to our array
        Utils.copyFromMat (frame,byte_array);
        //initialize a pointer with the apropriate size (array size)
        IntPtr pointer = Marshal.AllocHGlobal(byte_array.Length);
        Marshal.Copy (byte_array, 0, pointer , byte_array.Length);
        //here i call the C++ method (I imported a C++ dll)
        myCplusplusMethod(pointer ,frame.height(),frame.width());
        //free the pointer
        Marshal.FreeHGlobal(pointer );
void myCplusplusMethod(unsigned char* data,int height,int width){
     //btw you have to get the correct type. In my situation I use debug from C# and I found out that my image is CV_8UC3 type.
     Mat constructed= Mat(height, width, CV_8UC3, data);
     //..do whatever using the image.. (calculations , etc)..
}