Unity3D和OpenCV集成并相互传递相机帧

时间:2016-11-03 04:06:47

标签: performance opencv unity3d augmented-reality

背景

我一直在使用Unity3D和OpenCV开发AR项目。整合已按以下方式完成。

我们的OpenCV程序和OpenCV库本身编译成一个动态库(so文件Linux)。 (OpenCV库静态链接)

然后,在Unity3D中,在C#脚本中我们导入它(DllImport)并使用它的功能。

到目前为止,一切看起来都很清楚,但问题在于:两个部分(Unity3D和OpenCV)都需要相机的每一帧,所以有多种方法可以为它们提供相机帧:

  1. Unity3D读取帧(WebCamTexture)并通过转换为三个2D阵列并传递给OpenCV部分来发送它们。 (这样,OpenCV部分无法访问摄像头)

  2. OpenCV部分读取帧(VideoCapture::open)并发送回Unity3D。 (这样,Unity3D无法访问摄像头)

  3. 两部分都可以打开相机。

  4. 请注意,主要处理是在OpenCV部分完成的,Unity3D只需要帧来显示相机预览。

    问题:

    一切都与性能有关!哪种方法是表现的最佳方式,并且是最佳实践观点?

1 个答案:

答案 0 :(得分:2)

在性能方面,您应该使用#2 或制作自己的插件直接访问相机。

使用WebCamTexture#1 选项是最简单的方法,但最大的问题是它没有提供足够的帧来执行视频处理。

此外,WebCamTexture对iOS和Android都可以返回的图像大小有限制,这意味着您获得的图像质量与设备可以提供的图像质量不同。因此,从相机提供低质量的图像。大多数视频处理API(如Vuforia)使用自己的本机API来接收帧,您也应该这样做。

WebCamTexture不适合此。