C++ 将ARCore图像(YUV_420_888)转换为本机c+中的cv::Mat+;插件
我目前正在努力将从ARCore拍摄的YUV_420_888格式的图像转换为OpenCV Mat对象。我使用ARCore作为unity的插件,从中可以捕获表示图像的字节。 此外,我还使用了OpenCV编写C++中的标记检测,我计划使用它作为本地插件。到目前为止还不错 ARCore具有返回C++ 将ARCore图像(YUV_420_888)转换为本机c+中的cv::Mat+;插件,c++,opencv,arcore,unity3d-native-plugins,C++,Opencv,Arcore,Unity3d Native Plugins,我目前正在努力将从ARCore拍摄的YUV_420_888格式的图像转换为OpenCV Mat对象。我使用ARCore作为unity的插件,从中可以捕获表示图像的字节。 此外,我还使用了OpenCV编写C++中的标记检测,我计划使用它作为本地插件。到目前为止还不错 ARCore具有返回GoogleARCore.CameraImageBytes对象的功能,该对象包含以下信息(取自传输到本机插件的单个帧): 以及图像数据作为< C++ >系统。 这些信息在以下函数签名中传递给C++: extern
GoogleARCore.CameraImageBytes
对象的功能,该对象包含以下信息(取自传输到本机插件的单个帧):
以及图像数据作为< C++ >系统。
这些信息在以下函数签名中传递给C++:
extern "C" void findMarkersInImage(int width, int height, int y_row_stride, int uv_row_stride, int uv_pixel_stride,
unsigned char *image_data, int buffer_size)
我意识到,在这个或各种其他平台上,有许多答案建议了转换算法。然而,它们都使用从图像中直接收集图像平面信息的功能。说每个解决方案都依赖于调用名为getImageplanes(image,plane\u number)
的函数。此外,所有其他解决方案都会调用我不可用的AImage。此外,将收集到的图像字节转换为AImage,然后再转换为cv::Mat,对于一个应该实时运行、支持而不负面影响总体性能的算法来说,这似乎是一种计算过度
最后我想到了三个主要问题:
无符号字符*
中的平面位置extern "C" void findMarkersInImage(int width, int height, int y_row_stride, int uv_row_stride, int uv_pixel_stride,
unsigned char *image_data, int buffer_size)