「Pytorch」roLabelImg 图像异常旋转 bug

news/2024/9/14 2:12:31/ 标签: PyTorch, YOLO, LabelImg, roLabelImg, QImage, OpenCV, Pillow

在进行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 npimage_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读取图片,但是整个项目较为复杂,后续有时间再补上解决代码


http://www.ppmy.cn/news/1475464.html

相关文章

策略模式适用场景与具体实例解析

策略模式在多种场合下都能发挥其优势,尤其在需要根据不同条件或策略选择不同算法的场景中。下面是几个具体的适用场景及其对应的实例,以帮助进一步理解策略模式的实际应用。 1. 支付方式选择 在电子商务网站中,用户可以选择多种支付方式&am…

UDP 报文结构与注意事项全解析

在网络通信中,UDP(User Datagram Protocol,用户数据报协议)是一种无连接、不可靠的传输层协议。尽管它不如 TCP 那样提供可靠的传输服务,但在某些特定场景中,UDP 因其简单高效而备受青睐。 一、UDP 报文结…

WPF学习(3) -- 控件模板

一、操作过程 二、代码 <Window x:Class"学习.MainWindow"xmlns"http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x"http://schemas.microsoft.com/winfx/2006/xaml"xmlns:d"http://schemas.microsoft.com/expressio…

.NET MAUI开源架构_1.学习资源分享

最近需要开发Android的App&#xff0c;想预研下使用.NET开源架构.NET MAUI来开发App程序。因此网上搜索了下相关资料&#xff0c;现在把我查询的结果记录下&#xff0c;方便后面学习。 1.官方文档 1.1MAUI官方学习网站 .NET Multi-Platform App UI 文档 - .NET MAUI | Micro…

上传图片到腾讯云和wangeditor的图片上传到腾讯云

1.创建src/utils/upload-file.js文件 import COS from cos-js-sdk-v5 import SparkMD5 from spark-md5 import { cosTmpsecret, cosConfig } from /api/upload // 通过后台获取临时密钥 let key // 配置 // const cosConfig { // // Bucket: xlcp-tong-1253334579, // …

WPF学习(6) -- WPF命令和通知

一 、WPF命令 1.ICommand代码 创建一个文件夹和文件 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Input;namespace 学习.Command {public class MyCommand : ICommand{Acti…

旅游景区度假村展示型网站如何建设渠道品牌

景区、度假村、境外旅游几乎每天的人流量都非常高&#xff0c;还包括本地附近游等&#xff0c;对景区及度假村等固定高流量场所&#xff0c;品牌和客户赋能都是需要完善的&#xff0c;尤其是信息展示方面&#xff0c;旅游客户了解前往及查看信息等。 通过雨科平台建设景区度假…

本地部署,APISR: 动漫超分辨率技术

目录 引言 技术背景 APISR 的架构与原理 APISR 的主要特点 应用实例 本地部署 运行结果 结论 参考文献 GitHub - Kiteretsu77/APISR: APISR: Anime Production Inspired Real-World Anime Super-Resolution (CVPR 2024)APISR: Anime Production Inspired Real-World A…

百川工作手机实现销售管理微信监控系统

在瞬息万变的商业战场中&#xff0c;每一分效率的提升都是企业制胜的关键。传统销售管理模式已难以满足现代企业对精准、高效、合规的迫切需求。今天&#xff0c;让我们一同探索如何利用工作手机这一创新工具&#xff0c;为您的销售团队装上智能翅膀&#xff0c;开启销售管理的…

MySQL Binlog详解:提升数据库可靠性的核心技术

文章目录 1. 引言1.1 什么是MySQL Bin Log&#xff1f;1.2 Bin Log的作用和应用场景 2. Bin Log的基本概念2.1 Bin Log的工作原理2.2 Bin Log的三种格式 3. 配置与管理Bin Log3.1 启用Bin Log3.2 配置Bin Log参数3.3 管理Bin Log文件3.4 查看Bin Log内容3.5 使用mysqlbinlog工具…

张量笔记(4):张量网络

张量分解通常是将高维张量分解成一系列较低维的张量&#xff0c;表示能力相对较低。而张量网络可以表示复杂的高维数据结构&#xff0c;通过连接多个张量形成网络结构&#xff0c;可以更灵活地表示和处理复杂的数据关系。本节主要介绍HT和TT网络。 2.5.1 HT分解——首先我们引入…

Mac OS ssh 连接提示 Permission denied (publickey)

这错误有点奇葩&#xff0c;MacBook的IDE(vscode和pycharm)远程都连不上&#xff0c;terminal能连上&#xff0c;windows的pycharm能连上&#xff0c;见鬼了&#xff0c;所以肯定不是秘钥的问题了&#xff0c;查了好久竟然发现是权限的问题。。 chmod 400 ~/.ssh/id_rsa http…

兼容问题---ios底部的安全距离css设置

在H5上适配安全区域&#xff1a;采用viewportenvconstant方案。 具体操作如下&#xff1a; 1. 需要将viewport设置为cover&#xff0c;env和constant才能生效。设置代码如下&#xff1a; <meta name"viewport" content"widthdevice-width,initial-scale1.…

设置Llinux自带的led功能,在timer模式下设置delay_on后会把delay_off给清0

记录&#xff1a; 内核版本4.9.88. 问题复现方法是&#xff1a; 1. cd /sys/class/leds/cpu //cpu是内核自带led的节点名 2. echo timer > trigger 3. echo 100 > delay_on在设置完delay_on之后&#xff0c;发现delay_off自己设置为0了。同理设置delay_off后&#xff…

无障碍快捷方式图标

问题背景 测试反馈&#xff0c;无障碍快捷方式和setting里的无障碍图标不一致。 无障碍快捷方式悬浮窗 1、悬浮窗在systemui中 frameworks\base\packages\SystemUI\src\com\android\systemui\accessibility\floatingmenu\AccessibilityTargetAdapter.java 图标获取方式&…

C#面:ABP.NEXT 是什么,请阐述 ?

ASP.NET Boilerplate是.Net平台⾮常优秀的⼀个开源Web应⽤程序框架,在国内也有⼤量的粉丝.从名称可以看出来, 这是ASP.NET Boilerplate的下⼀代框架。 ABP框架创作于2013年&#xff0c;那时候没有.Net Core和ASP.NET Core&#xff0c;也没有Angular2 。ABP发布后&#xff0c;它…

01、Kerberos安全认证之原理及搭建命令使用学习笔记

文章目录 前言一、Kerberos原理1.1、数据安全防护&#xff08;kerberos所属的层次&#xff09;1.2、Kerberos介绍1.3、Kerberos名词介绍1.4、Kerberos术语1.5、Kerberos认证流程1.5.1、Kerberos流程图1.5.2、第一次通信&#xff1a;客户端与AS1.5.3、第二次通信&#xff1a;客户…

DNF手游攻略:云手机辅助刷副本!内置辅助工具!

DNF手游是一款备受玩家喜爱的角色扮演类游戏&#xff0c;以其独特的地下城探险和多样化的装备系统而闻名。玩家需要通过不断的挑战和升级&#xff0c;逐步增强自己的角色实力&#xff0c;最终完成各种高难度的副本任务。游戏的核心玩法包括打怪、刷装备、升级技能等。 游戏辅助…

【JavaScript脚本宇宙】提升用户体验:探索 JavaScript 命令行界面开发工具

构建交互式命令行&#xff1a;JavaScript 中的 CLI 开发利器 前言 在现代软件开发中&#xff0c;命令行界面&#xff08;CLI&#xff09;和终端应用程序的开发变得越来越重要。为了提高用户体验和交互性&#xff0c;使用合适的工具和库是至关重要的。本文将介绍一些用于构建命…

基于Python进行分类算法实验(人工智能)的设计与实现

基于Python进行分类算法实验(人工智能)的设计与实现 “Design and Implementation of Python-based Classification Algorithm Experiment in Artificial Intelligence” 完整下载链接:基于Python进行分类算法实验(人工智能)的设计与实现 文章目录 基于Python进行分类算法实验…