Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/137.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
C++ 将ARCore图像(YUV_420_888)转换为本机c+中的cv::Mat+;插件_C++_Opencv_Arcore_Unity3d Native Plugins - Fatal编程技术网

C++ 将ARCore图像(YUV_420_888)转换为本机c+中的cv::Mat+;插件

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

我目前正在努力将从ARCore拍摄的YUV_420_888格式的图像转换为OpenCV Mat对象。我使用ARCore作为unity的插件,从中可以捕获表示图像的字节。 此外,我还使用了OpenCV编写C++中的标记检测,我计划使用它作为本地插件。到目前为止还不错

ARCore具有返回
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,对于一个应该实时运行、支持而不负面影响总体性能的算法来说,这似乎是一种计算过度

最后我想到了三个主要问题:

  • 有没有办法找出包含整个图像的
    无符号字符*
    中的平面位置

  • “UV行跨距”值在每一帧中都不同,相差不大,但确实如此,这是正常行为吗

  • 前面提到的值是负值

  • 也许有人可以建议进一步的文献,也许对我有帮助。或者直接回答其中一个问题

    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)