【Python】Labelme/PIL读取图片朝向错误解决

一、问题背景

发现使用labelme直接读取含imageData(将图片bytes数据使用base64编码后的str数据)的json文件时,读上来的图片会发生自动旋转的问题。比如原先是横放的图,读进来后就成竖放的了,图片朝向(orientation)错误

我们可以用一个形象的例子来说明这种错误:
在这里插入图片描述

为什么图片会多此一举地弄一个朝向信息,而不是一步到位呢?

试想这样一个例子:你想给女朋友拍照,她很高,所以你把相机旋转了90度,最后成功拍了个全身照。

可能这个过程你已经重复过无数次,觉得非常自然。但仔细想想,相机的镜头是不会旋转的,也就是说如果人为地把相机旋转90度再拍照,拍下来的女朋友就会是横着站立,而不是正常的竖着站立。就像当你歪着头时,看到的世界也是歪着的。

为了防止这种诡异的现象出现,相机很机智地给图片加上了orientation标签,并“提醒”自己:这张图拍的时候我被旋转了90度,给主人看的时候要记得正过来。
在这里插入图片描述

所以这种记录方式的产生其实是两个因素导致的:①相机总是忠实地记录当时的场景,正的就是正的,反的就是反的;②相机希望记录当时的朝向,以方便做任何朝向上的调整。


二、产生原因

那么具体来说,在labelme的图片读取过程中哪里出问题会导致平时自动调整朝向的图片没有调整呢?

接着我们顺着labelme的流程走一遍

  1. 获取图片信息:labelme在读取json时会有一个if语句,如果有imageData,则直接获取imageData;如果没有imageData,则顺着imagePath找图片文件,然后读取图片文件:

    if data["imageData"] is not None:
        imageData = base64.b64decode(data["imageData"])
        if PY2 and QT4:
            imageData = utils.img_data_to_png_data(imageData)
    else:
        # relative path from label file to relative path from cwd
        imagePath = osp.join(osp.dirname(filename)
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Sprite.Nym

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值