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

zpf6vheq  于 2023-06-23  发布在  其他
关注(0)|答案(2)|浏览(148)

我刚开始学习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加载图像,结果完全一样

7fhtutme

7fhtutme1#

用途:

jhead -v YourImage.jpg

检查名为Orientation的EXIF参数-手机相机设置它,以便图像可以旋转。尝试一个图像的工作和另一个图像是 “不高兴”
您可以使用ImageMagick进行更正:

convert unhappy.jpg -auto-orient happy.jpg

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

dwthyt8l

dwthyt8l2#

你可以通过保存图像从keras再次解决。

from tensorflow import keras

path = "file_path"
img = keras.preprocessing.image.load_img( path ) 
img = ndimage.rotate( img , 270 ) #rotate 270 degree
keras.preprocessing.image.save_img( path , img )

相关问题