我正在使用我自己收集的一些图像处理图像处理。 Dlib的dlib.load_rgb_image('image_path')
方法在一些图像上交换行和列,而OpenCV的cv2.imread('image_path')
方法则没有。
我不想亲自动手转动这些有问题的图像,因为我正在创建一个应用程序。
看一看以下的结果
img = dlib.load_rgb_image("myimg.jpg")
print(img.shape)
--------------------
OUTPUT: (1944, 2592, 3)
(the resultant image is rotated 90 degrees clockwise)
而OpenCV的方法返回正确的形状:
img = cv2.imread("myimg.jpg")
print(img.shape)
--------------------
OUTPUT: (2592, 1944, 3)
有谁知道为什么会这样?
我还附上了其中一张有问题的照片的图像细节:
感谢@Mark Setchell,指出我正确的方向。
EXIF数据是关键所在。
dlib.load_rgb_image()
没有考虑EXIF orientation
元数据,因此有些图像读取不正确。要修复此图像的EXIF方向标记,需要检查该标记以对其执行正确的旋转。
显然,因为OpenCV 3.1 imread
完美地处理EXIF方向。