Tensorflow:DecodeJpeg方法为桌面和移动设备提供相同图像的不同像素值
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Tensorflow:DecodeJpeg方法为桌面和移动设备提供相同图像的不同像素值相关的知识,希望对你有一定的参考价值。
我在训练模型时使用了Tensorflow的DecodeJpeg
来读取图像。为了在android设备上使用相同的方法,我使用DecodeJpeg
编译了Tensorflow和bazel for android。
我尝试在桌面上阅读相同的图像,这是一台运行Windows的x86_64
机器。我在一个图像上运行DecodeJpeg
方法,默认值为dct_method
设置为''
,INTEGER_FAST
,INTEGER_ACCURATE
。
我在arm64
设备上做同样的图像。但是,在相同设置下,相同图像的像素值明显不同。
例如,在(100,100,1)桌面上的值是213
,而在204
上是arm64
。
更新:在(100,100)
的Gimp上,像素值为(179,203,190)
对于dct_method
设置为INTEGER_FAST
,(100,100)
在x86_64上的值是(171, 213, 165)
,在臂上它是(180, 204, 191)
对于dct_method
设置为INTEGER_ACCURATE
,(100,100)
在x86_64上的值是(170, 212, 164)
,在臂上它是(179, 203, 190)
这是(170, 212, 164)
与PIL
,这是我与cv2.imread
得到的。
据tensorflow image decode_jpeg documentation说,我希望你解码jpeg时它可能与某些属性有关。最有可能是channels
属性和/或ratio
属性和/或fancy_upscaling
attr。
它们都可以改变像素的值......
关于channels
:
attr通道指示解码图像的所需数量的颜色通道。
可接受的值是:
0: Use the number of channels in the JPEG-encoded image. 1: output a grayscale image. 3: output an RGB image.
关于ratio
:
attr比允许在解码期间通过整数因子缩小图像。允许的值为:1,2,4和8.这比稍后缩小图像要快得多。
关于fancy_upscaling
:
fancy_upscaling:一个可选的bool。默认为True。如果为真,则使用较慢但更好的色度平面升级(仅限yuv420 / 422)。
请注意,您可能还必须明确指定dct_method
的值,因为根据documentation,如果您没有指定值,它将使用系统特定的defaut。
在我看来,它(dct_method empty arg)是最可能的原因,它解释了为什么你在x86_64和ARM上没有相同的结果。
内部jpeg库更改为没有该特定选项的版本
以上是关于Tensorflow:DecodeJpeg方法为桌面和移动设备提供相同图像的不同像素值的主要内容,如果未能解决你的问题,请参考以下文章
ssd训练之bug:Invalid JPEG data or crop window, data size 565248