HarmonyOS 鸿蒙Next OH_NativeBuffer* nativeBuffer转为cv::Mat

发布于 1周前 作者 ionicwang 来自 鸿蒙OS

HarmonyOS 鸿蒙Next OH_NativeBuffer* nativeBuffer转为cv::Mat

参考:https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/image-info-c-V5
通过OH_ImageReceiverNative 获取到OH_ImageNative再得到 OH_NativeBuffer* nativeBuffer
参数是:1280*720,视频流格式是 CAMERA_FORMAT_YUV_420_SP = 1003
现想将nativeBuffer转为cv::Mat,代码如下

// 转换成Mat
// 创建一个 cv::Mat 对象来存储 BGR 图像
cv::Mat bgr_image(imgSizeRead.height, imgSizeRead.width, CV_8UC3);
// 将 nativeBuffer 转换为 cv::Mat 对象
cv::Mat yuv_image(imgSizeRead.height + imgSizeRead.height / 2, imgSizeRead.width, CV_8UC1, nativeBuffer);

一直没能正确转换。。 问题出在哪里?

3 回复

楼主您好,该问题需要demo代码进行分析,建议通过在线提单提交问题。

支持 - 在线提单 - 华为开发者联盟 (huawei.com)

你好,请问你是编译了opencv库么

在HarmonyOS中将OH_NativeBuffer* nativeBuffer转换为cv::Mat,通常你需要访问nativeBuffer的像素数据并将其映射到OpenCV的矩阵结构中。这通常涉及到几个步骤:

  1. 确认nativeBuffer的格式(如YUV, RGB等)和尺寸。
  2. 使用OH_NativeBuffer_Lock锁定缓冲区以获取其像素数据指针和步长。
  3. 根据nativeBuffer的格式和尺寸,创建一个相应大小和类型的cv::Mat
  4. 使用memcpy或类似函数将像素数据从nativeBuffer复制到cv::Mat的数据区域。
  5. 解锁nativeBuffer

如果问题依旧没法解决请加我微信,我的微信是itying888。

回到顶部