【问题标题】:How to convert tensorflow image Tensor to Numpy array inside Dataset?如何将张量流图像张量转换为数据集中的 Numpy 数组?
【发布时间】:2021-01-05 12:08:49
【问题描述】:

我想在图像增强期间创建一些图像蒙版。 Example image

代码:

import tensorflow as tf
import cv2
import pandas

# You can replace to local image
train_df = pd.DataFrame({'image_id': ['https://i.stack.imgur.com/CMEaA.jpg'],  
                         'label': [1]})


def create_mask(image, label):
    print(type(image)) # <class 'tensorflow.python.framework.ops.Tensor'>
    if isinstance(image, str):
        img = cv2.imread(image)
    else:
        img = image

    ## convert to hsv
    hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
    ## mask of green (36,0,0) ~ (70, 255,255)
    mask1 = cv2.inRange(hsv, (36, 0, 0), (70, 255,255))
    ## mask o yellow (15,0,0) ~ (36, 255, 255)
    mask2 = cv2.inRange(hsv, (15,0,0), (36, 255, 255))
    ## final mask and masked
    mask = cv2.bitwise_or(mask1, mask2)
    result = cv2.bitwise_and(img,img, mask=mask)
    return result, label

train_ds = tf.data.Dataset.from_tensor_slices((
    train_df.image_id.values,train_df.label.values))
train_ds = train_ds.map(create_mask)

结果我得到错误,因为我们在“图像”中有一个张量:

hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)

TypeError: Expected Ptr<:umat> for argument 'src'

好的,我们需要一个 numpy 数组。但如果我尝试 img = image.numpy() 我得到了错误:

AttributeError: 'Tensor' 对象没有属性 'numpy' 果然……

我还尝试了 eval() 和 sess.run(),但占位符出现错误,例如“张量不可散列,使用 tensor.ref()”,但如果我使用 ref(),我会得到类似“无法使用张量”。

好吧,我有一个简单的问题 - 谁能建议我一种在 tf.data.Dataset 中的图像处理期间将 Tensor 转换为 numpy 数组的工作方法?

【问题讨论】:

    标签: python numpy tensorflow tensorflow2.0 cv2


    【解决方案1】:

    尝试仅使用 Tensorflow 函数。例如,您可以使用tf.image.rgb_to_hsv

    rgb = tfio.experimental.color.bgr_to_rgb(img)
    hsv = tf.image.rgb_to_hsv(rgb)
    

    您也应该找到一种 Tensorflow 方法来执行以下操作。

    【讨论】:

      猜你喜欢
      • 2020-12-21
      • 1970-01-01
      • 2018-06-27
      • 1970-01-01
      • 1970-01-01
      • 2021-01-08
      • 1970-01-01
      • 2021-10-17
      • 2018-11-28
      相关资源
      最近更新 更多