1. 开源项目链接
GitHub - jameslahm/labelme: A image annotation software for 2D or 3D images
2. 项目界面
3. 项目类图
全部类图:
3.1 Shape 形状的绘制及形状的存储
qt项目-《图像标注软件》源码阅读笔记-Shape类绘图及其子类-CSDN博客
负责形状的绘制及形状的存储
- Brush代表画刷形状,用于分割标注;
- Rectangle代表矩形形状;
- Polygons代表多边形形状;
- Circle代表圆形形状;
- Curve代表平滑曲线形状;
- Rectangle3D代表3d长方体形状;
- Brush3D代表3d画刷形状,用于3d分割标注。
3.2 CentralWidget主窗口中心组件的界面管理
qt项目-《图像标注软件》源码阅读笔记-CentralWidget类及其子类-CSDN博客
CentralWidget类负责主窗口中心组件的界面初始化以及后续中心组件的管理。
其两个派生类分别负责2D、3D中心组件,
2d和3d的模式可以进行切换。
- 内部的绘画以及标注相关的动作交由Label类(或Label3D类)进行处理;
- 命令的撤销和重做交由Command2D类(或Command3D)进行处理;
- 标注文件的解析和存储,以及3D图片系列文件的解析均交由Parse类进行处理。
3.3 Command负责实现撤销和重做功能
qt项目-《图像标注软件》源码阅读笔记-Command类绘图及其子类-CSDN博客
Command是命令栈基类,用来实现撤销和重做功能,有6个虚函数;
子类Command2D和Command3D实现这6个虚函数;
- logAdd:记录添加标注;
- logDelete:记录删除标注;
- logMove:记录移动标注;
- logChange:记录更改标注;
- undo:撤销功能;
- redo:重做功能。
3.4 其他类
3.4.1 Label 类
qt项目-《图像标注软件》源码阅读笔记-Label 2d绘制图片及标注类-CSDN博客
功能:
2d绘制图片及标注类,继承QLabel
内部具体的形状的绘制均交由Shape类进行处理,
Shape类为形状基类,
具体的绘制则会调用对应形状类的虚函数。
3.4.2 Parse类
标注文件信息的解析和保存。
3.4.3 ActionsInit
负责所有QAction的管理(有所有快捷键的设置),以及主窗口各组件QAction的初始化和状态管理
- setUp(QMainWindow* w):主窗口所有QAction的初始化
- setUp(QMenuBar* mbar):初始化菜单栏上的所有动作
- setUp(QStatusBar* sbar):初始化状态栏上的所有动作
- setUp(QToolBar* tbar):初始化工具栏上的所有动作
- initStatus:负责状态初始化,当主窗口需要状态初始化时,调用该函数
- enableAction:对外的接口,控制QAction的enable
- disableAction:对外的接口,控制QAction的disable
- setStatus:根据主窗口的状态,同步更改QAction的状态
- toggleAction:切换动作的checkstate
- setUpCentralWidget:中心组件右键菜单
- setUpLabelsDWInit:标签列表组件右键菜单
- createShape:创建标注时的动作状态管理
3.4.4 MainWindow类
主窗口
- MainWindow 类是主窗口类,采用策略模式进行管理,成员变量包括窗口的各个组件部分(代理);
- 所有的UI界面的设计及初始化均在组件的setup函数中完成;
- MainWindow只负责消息的传递,包括信号与槽的连接、QAction的触发和消息的转发等等,不负责具体的处理,具体的处理全部分别交由具体的组件;
- 组件包括:动作管理组件,菜单栏管理组件,状态栏管理组件,工具栏管理组件,标签列表管理组件,文件列表管理组件以及中心窗口组件。
3.4.5 FilesDWInit 类
负责文件列表组件的初始化及状态管理
- 负责文件列表浮动窗口组件的界面初始化;
- 以及后续的文件列表的管理;
- 与文件相关的动作比如打开文件、打开文件夹等均由MainWindow进行消息传递转发到此处进行处理。
3.5 枚举
软件总共有4个枚举类型。
3.5.1 Status 主窗口的状态变量
enum Status {Edit,Focus,Create};
总共3个状态。
- edit为默认状态,此时处于编辑标注的状态;
- focus为选中状态,表明此时有标注被选中,可以进行响应的操作;
- create为创建标注状态,表明此时正在创建标注.
3.5.2 Mode 主窗口模式状态变量
enum Mode {TwoD,ThreeD};
- TwoD代表处于2d状态;
- ThreeD代表处于3d状态
3.5.3 shapeStatus 中心组件状态
enum shapeStatus {BrushShape,PolygonsShape,RectangleShape,CircleShape,CurveShape,NoShape,InShape};
总共7个状态。
- noshape表明此时鼠标不在标注形状内部,且不在创建状态;
- inshape表明此时鼠标在标注形状内部;
- brushshape表明此时处于创建画刷状态,(分割标注);
- rectangleshape表明此时处于绘制矩形状态;
- circleshape表明处于创建圆形状态;
- polygonsshape表明处于创建多边形状态;
- curveshape表明处于创建平滑曲线状态.
3.5.4 syncStatus 3d组件对label3d的统一接口中同步状态变量
enum syncStatus {AddShape,AddPoint,Selected,Remove,UnSelected,ChangePoint,ShowMessage,Hovered,UnHovered,Offset};
总共10个状态。
- addshape表明添加标注形状;
- addpoint表明添加像素点;
- selected表明选中;
- unselected表明未选中;
- remove表明移除正在创建的形状;
- changepoint表明更改正在绘制的像素点;
- showmessage表明显示鼠标坐标;
- hovered表明鼠标在该标注形状内;
- unhovered表明鼠标已不在该标注形状内;
- offset表明偏移标注位置