Keras预处理在导入图像时使用load_img()旋转图像

时间:2019-06-25 15:05:19

标签: python python-3.x tensorflow image-processing keras

我刚刚开始学习Keras API,正在尝试MNIST数据集。我可以正常工作,但是尝试测试拍摄的照片时,功能load_img() from the keras.preprocessing.image库有问题。它将纵向图像导入为横向图像。我使用智能手机以纵向模式拍摄了照片,Windows正确显示了宽度3024和高度4032像素。

当我加载该图像并打印宽度和高度时,它显示4032x3024。同样,当我执行img.show()时,它似乎已逆时针旋转了90度。加载后立即发生的所有事情,无需任何处理。我尝试查看load_img()的API,但找不到任何使其在加载时旋转的参数。

这是一个向您展示问题的虚拟示例:

from keras.preprocessing.image import load_img

img = load_img('filepath/test.jpg') # Load portrait mode image Windows says 3024x4032
width, height = img.size
print(width, height) # Prints 4032 3024
img.show() # Shows it rotated by 90 degrees counterclockwise

我希望将其以纵向模式导入。为什么会旋转?问题在于,以横向模式拍摄的照片也被导入为4032 x 3024,因此我无法区分这两个方向。我希望能够在纵向模式下旋转图像,但在横向模式下不能旋转图像。

编辑:我只是尝试用Pillow加载图像,结果完全一样

1 个答案:

答案 0 :(得分:1)

使用:

jhead -v YourImage.jpg

检查称为Orientation的EXIF参数-手机摄像头对其进行了设置,以便可以旋转图像。尝试使用其中一张有效的图片和另一张“不满意” 的图片。

您可以使用 ImageMagick 对其进行纠正:

convert unhappy.jpg -auto-orient happy.jpg

或者使用exiftool更容易。讨论和示例here