如何将张量流图像张量转换为数据集中的Numpy数组



我想在图像增强过程中创建一些图像掩码。示例图像

代码:

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(

类型错误:应为Ptr<cv::UMat>对于参数"src">

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

AttributeError:"Tensor"对象没有属性"numpy">如预期。。。

此外,我还尝试了使用sess.run((的eval((,但占位符出现了错误,类似于"张量不可更改,使用tensor.ref((",但如果我使用ref((,我会得到类似于";不能使用张量";。

好吧,我有一个简单的问题——有人能给我一个在tf.data.Dataset中进行图像处理时将张量转换为numpy数组的工作方法吗?

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

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

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

最新更新