「Pytorch」roLabelImg 图像异常旋转 bug

在进行Yolo-obb 模型训练的时候需要标注旋转框,roLabelImg 是比较推荐的一款旋转框标注工具,既可以标注正常的矩形框,还可以标注旋转框

roLabelImg Github 地址:https://github.com/HumanSignal/labelImg

但是在使用过程中遇到了一个比较难搞的bug。对于手机等拍摄的图像,除了图像内容还会保存很多其他信息,比如下图的旋转,采用不同的方式打开,效果是不一样的,使用常规的图像查看就是正常的,但是使用 roLabelImg 打开就会发现逆时针旋转 90度。由于roLabelImg 开发较早,目测好像没人维护了,bug也没人解决了,对于项目比较急的小伙伴,可以采用本文临时救急使用,后续有时间再修复bug

在这里插入图片描述


原因

先说下造成这种情况的原因。通过 roLabelImg.py 文件可以看出,roLabelImg 在读取图片的时候是先通过read 函数,将图像以二进制的形式读取所有内容,然后再 QImage.fromData 将像素信息提取出来,但是 QImage 读取的时候会根据图片的头信息结合旋转显示,而Yolo-obb模型读取数据的时候直接采用 opencv 的形式将图片读取出来,出入就此产生

def read(filename, default=None):
    try:
        with open(filename, 'rb') as f:
            return f.read()
    except:
        return default

在这里插入图片描述


解决办法

由于比赛时间紧迫,因此当时我们采用的解决方案是,将所有的图片重置一遍,简单点将就是使用 opencv 将图片读取之后,再将所有的像素内容保存一遍,从而去除掉图片中的头信息,在此推荐使用cv2.imdecode 进行读取,不受限于操作系统和中英文路径,而cv2.imread在windows系统下如果路径中有中文,则会跳过且不报错(又是一把辛酸泪(灬ꈍ ꈍ灬)),可以参考我的这篇博客查看细节cv2.imdecode & cv2.imread 的区别

import cv2
import numpy as np


image_data = np.fromfile(pred_image_path, dtype=np.uint8)	# 从文件中读取图像数据
image = cv2.imdecode(image_data, cv2.IMREAD_COLOR)			# 使用cv2.imdecode()解码图像数据

# 简写
image = cv2.imdecode(np.fromfile(pred_image_path, dtype=np.uint8), cv2.IMREAD_COLOR)	# 支持中文,与cv2.imread 读取一致

在此建议不要原地覆盖,而是另保存一个路径,这样一来可以保存原有数据,以防后期需要,二来原地覆盖保存,可能因为 opencv 不提示警告、错误信息,导致重置失败而不自知,保存在其他路径,查看图片数量即可指导是否出错。

后续优化

明白人都知道,此方法只能解决燃眉之急,不是根本解决之道,因此真正的解决办法应该是采用OpenCV 或者 PIL读取图片,但是整个项目较为复杂,后续有时间再补上解决代码

相关推荐

  1. RoLabelImg下载及旋转目标检测数据标注

    2024-07-14 04:18:03       24 阅读
  2. 旋转图像【矩阵】

    2024-07-14 04:18:03       54 阅读
  3. leetcode48. 旋转图像

    2024-07-14 04:18:03       37 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-14 04:18:03       67 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-14 04:18:03       72 阅读
  3. 在Django里面运行非项目文件

    2024-07-14 04:18:03       58 阅读
  4. Python语言-面向对象

    2024-07-14 04:18:03       69 阅读

热门阅读

  1. QTextEdit 设置宽度

    2024-07-14 04:18:03       25 阅读
  2. redis 夺命21问

    2024-07-14 04:18:03       20 阅读
  3. Gitlab介绍

    2024-07-14 04:18:03       17 阅读
  4. 变分法笔记2

    2024-07-14 04:18:03       21 阅读
  5. 爬虫:Sentry-Span参数逆向

    2024-07-14 04:18:03       20 阅读
  6. android 嵌套webview,软键盘遮挡输入框

    2024-07-14 04:18:03       23 阅读
  7. ref和reactive区别

    2024-07-14 04:18:03       21 阅读
  8. 【随想】闲聊、沟通和谈判

    2024-07-14 04:18:03       20 阅读
  9. nginx防盗链

    2024-07-14 04:18:03       26 阅读
  10. 【C++编程】类的静态 static 成员 & 常 const 函数

    2024-07-14 04:18:03       19 阅读
  11. Python自定义可切片的类

    2024-07-14 04:18:03       20 阅读
  12. 力扣题解(最长的斐波那契子序列的长度)

    2024-07-14 04:18:03       24 阅读