一、Eagertensor与numpy.array的转换
显示错误:AttributeError: ‘tensorflow.python.framework.ops.EagerTensor’ object has no attribute ‘np’
Tensorflow2.0+版本下,Eager模式下的Tensor转换为nparray,如果直接用tensor.numpy(),会出现上面的错误,正确转换的方式是numpy.array(tensor)才对;顺便提一句,numpy转tensor的方法是tf.convert_to_tensor(numpy)
二、tf.io.read_file(path)与cv2.imread(path)
Tensorflow2.0.0下读取图片路径,并生成Tensor的语句为:
img_raw = tf.io.read_file(image_path)
img_tensor = tf.image.decode_jpeg(img_raw, channels=3, dct_method='INTEGER_ACCURATE')
其中可能会有人发现读取出来的图片像素矩阵,与真实的图片像素矩阵是不同的,其实是因为tf.image.decode_jpeg方法中参数dct_method参数默认为" “,即默认使用DCT方法,牺牲了保真度以提高速度;因此与照片真实的像素矩阵会有不同;使用” INTEGER_ACCURATE "可以使得恢复旧版的行为,保持照片的真实像素点。
Opencv读取图片路径,并生成Numpy的语句为:
img_raw = cv2.imread(image_path)
必须指出的是,Tensorflow读取的图片Tensor是RGB格式的,而Opencv读取的图片BGR格式的,如果你训练时候是训练图片的RGB格式矩阵,但测试时候是使用的Opencv读取图片,则可能会出现错误的结果;Opencv将BGR转化为RGB的方法为:
frame = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)
或者
frame = frame[:, :, ::-1]
本文介绍如何在TensorFlow 2.0+版本中正确地将EagerTensor转换为numpy.array,以及如何通过设置参数来确保从文件读取的图像数据与实际像素矩阵一致。此外,还对比了TensorFlow和OpenCV读取图像的不同之处,包括颜色格式的区别及如何进行转换。
1万+






