Tensorflow中的等效fillPoly

时间:2018-04-10 19:48:17

标签: python opencv tensorflow

Tensorflow API是否具有与OpenCV cv2.fillPoly等效的功能或可以在黑色背景上绘制填充边界框的另一个功能like this image。为了仅使用tf.bitwise_and保留原始图像中的填充框。我已尝试使用tf.image.crop_to_bounding_box,但我需要使用此功能迭代我的框,因为形状为(None,4)而无法进行迭代。

编辑: 这是我的代码的一部分

            res = tf.gather(boxes,true_indices) #My boxes shape (None,4)
            back = tf.get_variable("back", shape=image.shape, dtype=tf.uint8,
                                initializer=tf.zeros_initializer(), trainable=False) #Represent background

                def my_func(x):
                    casted_boxes = tf.cast(x, dtype=tf.int32)
                    casted_img = tf.image.convert_image_dtype(image, dtype=tf.uint8)
                    cropped_image = tf.image.crop_to_bounding_box(casted_img, casted_boxes[1],casted_boxes[0],
                                                              casted_boxes[3] - casted_boxes[1], casted_boxes[2] - casted_boxes[0])
                    return  back[casted_boxes[0]:, casted_boxes[1]:, :].assign(cropped_image) #Here I get a problem
            r = tf.map_fn(my_func, res, tf.uint8)

使用上面的代码,我得到:AttributeError: 'Operation' object has no attribute '_c_op'

1 个答案:

答案 0 :(得分:0)

我并不完全确定我会通过迭代你的方式来遵循你的意思,所以请澄清我是否错过了你的观点。

我相信您需要使用tf.map_fn来执行多个框的操作。 tf.map_fn会将一些张量流操作(通过将它们作为地图函数返回来定义)应用于数据中的每个元素。

https://www.tensorflow.org/api_docs/python/tf/map_fn

在这种情况下,您的边界框的形状为[None, 4]。在运行时,如果你有42个边界框,它们将具有某种形状,例如,该形状将是[42, 4]

在这种情况下,

tf.map_fn将沿着42个边界框的第一维解包边界框,并将从map函数返回的任何OP应用于每个边界框,并返回连接结果。