一、roLabelImg简介

roLabelImg是基于labelImg改进的,也是用来标注为VOC格式的数据,但是在labelImg的基础上增加了能够使标注的框进行旋转的功能。

网址:https://github.com/cgvict/roLabelImg/blob/master/README.rst

 

二、windows上安装编译

详细可以参考labelImg里的说明(https://github.com/tzutalin/labelImg

1) 下载Anaconda(python3+)

2)打开命令窗口,输入如下命令

      $ conda install pyqt=5

      $ pyrcc5 -o libs/resources.py resources.qrc

      $ python labelImg.py , 或

      $  python labelImg.py [IMAGE_PATH] [PRE-DEFINED CLASS FILE]

3) 编译打包,可以使用如下命令:

      $  /PATH/TO/pyinstaller.exe --hidden-import=xml ^

            --hidden-import=xml.etree ^

            --hidden-import=xml.etree.ElementTree ^

            --hidden-import=lxml.etree ^

            -D -F -n roLabelImg -c "../labelImg.py" -p ../libs -p ../

 

三、使用方法

软件快捷键如下:

1) w: 创建水平矩形目标框

2) e: 创建旋转矩形目标框

3) zxcv: 旋转目标框,键z和建x是逆时针旋转,键c和键v是顺时针旋转

使用roLabelImg标注得到的目标框的信息如下:

  • width是图像的宽,height是图像的高,depth是图像的通道数
  • cx, cy表示bndbox的中心点坐标(坐标系方向和一般的图像坐标系相同,左上角为原点,向右为x正方向,向下为y正方向);
  • h和w是标记目标的高和宽;
  • angle是旋转角度信息,水平bndbox,angle=0,,顺时针方向旋转,得到的角度值是一个弧度单位的正值,且旋转一周为pi,没有负值。

 

四、标签目标格式转换

4.1 转换成四点坐标:

def rotatePoint(xc,yc, xp,yp, theta):

      xoff = xp-xc;

      yoff = yp-yc;

      cosTheta = math.cos(theta)

      sinTheta = math.sin(theta)

      pResx = cosTheta * xoff + sinTheta * yoff

      pResy = - sinTheta * xoff + cosTheta * yoff

      # pRes = (xc + pResx, yc + pResy)

      return xc+pResx,yc+pResy

 

def addRotatedShape(cx,cy,w,h,angle):

      p0x,p0y = self.rotatePoint(cx,cy, cx - w/2, cy - h/2, -angle)

      p1x,p1y = self.rotatePoint(cx,cy, cx + w/2, cy - h/2, -angle)

      p2x,p2y = self.rotatePoint(cx,cy, cx + w/2, cy + h/2, -angle)

      p3x,p3y = self.rotatePoint(cx,cy, cx - w/2, cy + h/2, -angle)

      points = [(p0x, p0y), (p1x, p1y), (p2x, p2y), (p3x, p3y)]

      return points

详细代码参考: pascal_voc_io.py(https://github.com/cgvict/roLabelImg/blob/master/libs/pascal_voc_io.py

 

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐