是否存在将cvimg正确转换为张量而不引起任何颜色失真的正确方法?我通过存储2张图像进行了比较。一个使用张量流解码,另一个使用openCV
file_reader = tf.read_file(file_name, input_name)
if file_name.endswith(".png"):
image_reader = tf.image.decode_png(
file_reader, channels=3, name="png_reader")
elif file_name.endswith(".gif"):
image_reader = tf.squeeze(
tf.image.decode_gif(file_reader, name="gif_reader"))
elif file_name.endswith(".bmp"):
image_reader = tf.image.decode_bmp(file_reader, name="bmp_reader")
else:
image_reader = tf.image.decode_jpeg(
file_reader, channels=3, name="jpeg_reader")
image_reader = tf.convert_to_tensor(cvimg)
在进行简历转换期间,我在这里缺少一些步骤吗?谢谢!
答案 0 :(得分:2)
OpenCV以BGR格式加载图像,而Tensorflow使用RGB格式(如您所见,图像的蓝色和红色通道已交换)。
因此,如果要读取使用OpenCV加载的图像(我想是cvimg
),则只需将色彩通道从BGR交换为RGB:
image_reader = tf.convert_to_tensor(cvimg)
b, g, r = tf.unstack (image_reader, axis=-1)
image_reader = tf.stack([r, g, b], axis=-1)
答案 1 :(得分:0)
另一种方法是:
image_reader=tf.reverse(cvimg,axis=[-1])
tf.reverse
将颠倒您指定尺寸的顺序。由于cvimg(opencv image,[height,width,channel])
是BGR格式,
因此tf.reverse(cvimg,axis=[-1])
会将BGR(最后一个尺寸)反转为RGB,
您不必使用tf.convert_to_tensor(cvimg)
,因为tensorfow会自动从numpy数组转换为张量。