Opencv 正确地将图像从cvimg转换为张量

Opencv 正确地将图像从cvimg转换为张量,opencv,tensorflow,Opencv,Tensorflow,有没有一种正确的方法可以将cvimg正确地转换为张量,而不会导致任何颜色失真?我通过存储两幅图像进行了比较。一个使用tensorflow进行解码,另一个使用openCV进行解码 使用tensorflow jpeg编码器生成的图像 file\u reader=tf.read\u文件(文件名,输入名) 如果文件名为.endswith(“.png”): image\u reader=tf.image.decode\u png( 文件读取器,通道=3,name=“png读取器”) elif文件名.en

有没有一种正确的方法可以将cvimg正确地转换为张量,而不会导致任何颜色失真?我通过存储两幅图像进行了比较。一个使用tensorflow进行解码,另一个使用openCV进行解码


使用tensorflow jpeg编码器生成的图像

file\u reader=tf.read\u文件(文件名,输入名)
如果文件名为.endswith(“.png”):
image\u reader=tf.image.decode\u png(
文件读取器,通道=3,name=“png读取器”)
elif文件名.endswith(“.gif”):
图像读取器=tf(
tf.image.decode\u gif(文件读取器,name=“gif\u读取器”))
elif文件名.endswith(“.bmp”):
image\u reader=tf.image.decode\u bmp(file\u reader,name=“bmp\u reader”)
其他:
image\u reader=tf.image.decode\u jpeg(
文件读取器,通道=3,name=“jpeg读取器”)

使用cv生成的图像转换为张量

image\u reader=tf.convert\u to\u tensor(cvimg)

在cv转换过程中,我是否遗漏了一些步骤?谢谢

OpenCV以BGR格式加载图像,而Tensorflow使用RGB格式(您可以看到图像的蓝色通道和红色通道被交换)

因此,如果您想读取使用OpenCV加载的图像(我想
cvimg
),只需将颜色通道从BGR切换到RGB即可:

image\u reader=tf.convert\u to\u tensor(cvimg)
b、 g,r=tf.unstack(图像读取器,轴=-1)
image_reader=tf.stack([r,g,b],轴=-1)

OpenCV以BGR格式加载图像,而Tensorflow使用RGB格式(您可以看到图像的蓝色和红色通道被交换)

因此,如果您想读取使用OpenCV加载的图像(我想
cvimg
),只需将颜色通道从BGR切换到RGB即可:

image\u reader=tf.convert\u to\u tensor(cvimg)
b、 g,r=tf.unstack(图像读取器,轴=-1)
image_reader=tf.stack([r,g,b],轴=-1)
另一种方法是:

 image_reader=tf.reverse(cvimg,axis=[-1])
tf.reverse
将反转指定维度的顺序。因为
cvimg(opencv图像,[高度、宽度、通道])
是BGR格式, 因此
tf.reverse(cvimg,axis=[-1])
将BGR(最后一个维度)反转为RGB, 您不必使用tf.convert_to_tensor(cvimg),因为tensorfow将自动从numpy数组转换为tensor。

另一种方法是:

 image_reader=tf.reverse(cvimg,axis=[-1])
tf.reverse
将反转指定维度的顺序。因为
cvimg(opencv图像,[高度、宽度、通道])
是BGR格式, 因此
tf.reverse(cvimg,axis=[-1])
将BGR(最后一个维度)反转为RGB,
您不必使用
tf.convert_to_tensor(cvimg)
,因为tensorfow将自动从numpy数组转换为tensor。

您的代码看起来不完整。如何获取cvimg?啊,cvimg是从另一个模块传入的。这是一个BGR映像,显然您的代码看起来不完整。如何获取cvimg?啊,cvimg是从另一个模块传入的。这是一个BGR的形象,显然哦,谢谢!你是个救命恩人,我以为图像信息清楚地表明RGB和OpenCV不会在加载时将其转换为BGR。我的错。哦,谢谢!你是个救命恩人,我以为图像信息清楚地表明RGB和OpenCV不会在加载时将其转换为BGR。我的错。虽然这可能是一个有价值的输入,请添加一个解释谢谢你的建议。因为我的英语很差,我担心我的表达不清楚。虽然这可能是一个有价值的输入,但请补充解释谢谢你的建议。因为我的英语很差,我担心我的表达不清楚。