【问题标题】:Convert OpenCV Mat or Image to NumPy array for Tensorflow将 OpenCV Mat 或 Image 转换为 Tensorflow 的 NumPy 数组
【发布时间】:2019-10-23 04:17:39
【问题描述】:

这个问题是关于在 .Net 中进行 Tensorflow 对象检测的一切工作。因为我在 .Net 中,所以我使用包装 EmguCV 进行 OpenCV 调用。至于 Tensorflow,.Net 中也有许多包装器。

我的问题很笼统,可能是 .Net 特定的,但我不这么认为。在 Emgu 或 OpenCV 中,我使用 VideoCapture 从视频源中读取帧。每帧都是一个 Mat,也可以很容易地转换为 OpenCV 图像。然而,Tensorflow 对象检测需要某种图像数组作为输入,怀疑是 NumPy 数组。

我找到了许多示例和示例代码,但其中大多数都与在文件系统上保存图像(例如 jpeg)并将其读入有关。没有多少与拥有 OpenCV Mat 或图像并转换它有关到 TensorFlow 的输入数组。

特别是对于我正在使用的 Tensorflow 包装器 Tensorflow.Net,它实际上需要一个称为 FeedItem 的东西,如此处所示 Tensorflow.Net 并且再次,此示例读取图像文件。

我一直在想办法。我试图获取 Mat 和 Image Data 属性,它是一个字节数组并将其转换为 NumPy 数组,但它不起作用。我收到异常说不支持锯齿状数组。

所以,简单地说,有人知道如何正确有效地将这些类型的图像数据转换为 NumPy 或我可以输入到 Tensorflow 输入的东西吗?

谢谢!

【问题讨论】:

    标签: .net opencv tensorflow emgucv


    【解决方案1】:

    Jagged arrays - 实际上是数组的数组,其中外部数组包含嵌套数组,分配在内存中的其他位置。你需要做的是分配一个相同类型的扁平连续数组,例如,

    byte[] data = new byte[numberOfImages * width * height * 3];
    

    并从使用CopyTo 的Data 属性复制字节。 (我对 EmguCV 不熟悉,可能有更有效的方法来做到这一点)。

    然后将data转换成NumPy数组。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-12-15
      • 1970-01-01
      • 2015-06-27
      • 2016-09-04
      • 1970-01-01
      • 2011-11-27
      • 1970-01-01
      • 2016-12-30
      相关资源
      最近更新 更多