一、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]