get_shape()和ndims用于通过opencv读取的图像

时间:2017-02-19 23:36:41

标签: python opencv tensorflow computer-vision

我读了如下图像

image_float = cv2.imread('/data/cat.jpg',cv2.IMREAD_UNCHANGED)

读取图像的形状为(1200, 1600, 3)

当此读取数组传递给以下代码if image.get_shape().ndims != 3:时,将显示一条错误消息AttributeError: numpy.ndarray' object has no attribute get_shape

在我看来,get_shape()ndims期待Tensorflow张量。但是,我如上所述使用cv2读取图像。如何将cv2读取的图像转换为张量流张量。

最初,图像读取如下

rl = ("https://upload.wikimedia.org/wikipedia/commons/d/d9/"
       "First_Student_IC_school_bus_202076.jpg")

image_string = urllib2.urlopen(url).read()
image = tf.image.decode_jpeg(image_string, channels=3)

# Convert image to float32 before subtracting the
# mean pixel value
image_float = tf.to_float(image, name='ToFloat')

1 个答案:

答案 0 :(得分:0)

尝试先将其转换为张量:

image_cv = cv2.imread('/data/cat.jpg', cv2.IMREAD_UNCHANGED)

image_tensor = tf.convert_to_tensor(image_float, dtype=np.int32)
image_float = tf.to_float(image_tensor, name='ToFloat')

顺便说一句,如果它是JPEG(不支持alpha通道),为什么需要IMREAD_UNCHANGED标志?

您也可以只要求TF从该文件中加载jpeg:

image = tf.image.decode_jpeg(tf.read_file('/data/cat.jpg'), channels=3)