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

问题描述 投票:0回答:1

我读了如下图像

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')
python opencv tensorflow computer-vision
1个回答
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')

BTW为什么你需要IMREAD_UNCHANGED旗帜,如果它是JPEG(不支持alpha通道)?

您也可以让TF从该文件加载jpeg:

image = tf.image.decode_jpeg(tf.read_file('/data/cat.jpg'), channels=3)
© www.soinside.com 2019 - 2024. All rights reserved.