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