背景
我一直在使用Unity3D和OpenCV开发AR项目。整合已按以下方式完成。
我们的OpenCV程序和OpenCV库本身编译成一个动态库(so
文件Linux)。 (OpenCV库静态链接)
然后,在Unity3D中,在C#脚本中我们导入它(DllImport
)并使用它的功能。
到目前为止,一切看起来都很清楚,但问题在于:两个部分(Unity3D和OpenCV)都需要相机的每一帧,所以有多种方法可以为它们提供相机帧:
Unity3D读取帧(WebCamTexture
)并通过转换为三个2D阵列并传递给OpenCV部分来发送它们。 (这样,OpenCV部分无法访问摄像头)
OpenCV部分读取帧(VideoCapture::open
)并发送回Unity3D。 (这样,Unity3D无法访问摄像头)
两部分都可以打开相机。
请注意,主要处理是在OpenCV部分完成的,Unity3D只需要帧来显示相机预览。
问题:
一切都与性能有关!哪种方法是表现的最佳方式,并且是最佳实践观点?
答案 0 :(得分:2)
在性能方面,您应该使用#2 或制作自己的插件直接访问相机。
使用WebCamTexture
的#1 选项是最简单的方法,但最大的问题是它没有提供足够的帧来执行视频处理。
此外,WebCamTexture
对iOS和Android都可以返回的图像大小有限制,这意味着您获得的图像质量与设备可以提供的图像质量不同。因此,从相机提供低质量的图像。大多数视频处理API(如Vuforia)使用自己的本机API来接收帧,您也应该这样做。
WebCamTexture
不适合此。