python - 为什么dlib的load_rgb_image()方法旋转一些图像?

标签 python image opencv dlib

我正在使用一些我自己收集的图像进行图像处理。 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)

有谁知道为什么会这样吗?

我还要附上其中一张违规照片的图像细节:

image.png

最佳答案

感谢@Mark Setchell,为我指出了正确的方向。

EXIF数据是关键。
dlib.load_rgb_image()没有考虑EXIF orientation元数据,因此某些图像读取不正确。为了解决这个问题,需要检查图像的EXIF方向标签以对其执行正确的旋转。

这里有一些很好的答案:
Rotating an image with orientation specified in EXIF using Python without PIL including the thumbnail

显然,由于OpenCV 3.1 imread可以完美处理EXIF方向。

关于python - 为什么dlib的load_rgb_image()方法旋转一些图像?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55392646/

相关文章:

python - 在 for 循环中需要范围

ios - XCUITest - 无法使用 iOS 11 找到图像的命中点

c++ - OpenCV - 寻找轮廓终点?

c++ - cv::Mat 检测 PixelFormat

python - 取消订阅的对象

python - 尝试从 while 循环返回 python 中的正确整数?

image - 如何将 RAM 中的图像读取为一致的格式?

javascript - 从 jquery 通过 AJAX 发送图像数据

c++ - Visual Studio 中的静态和动态链接

python - 使用开始日期和结束日期列重新采样