目标检测之---data augment rotate

新手代码,写得很是鸡肋,仅为个人记录...有时间再进行优化...

def ratebox(img, box, angle):
    (h, w) = img.shape[:2]
    if angle < 0: #顺时针
        flag = True
    else:
        flag = False
    newlabel = []
    x = 0
    y = 0
    for i in xrange(0, len(box) - 1, 2):
        a = abs(h / 2 - box[i + 1])
        b = abs(box[i] - w / 2)
        b = fun(b) #避免分母为0的情况.
        thta = 180 * math.atan(a / b) / math.pi
        thta1 = thta + angle  # 1 3 xx
        thta2 = thta - angle  # 2 4 xx
        
        # >= <= 的等号千万不能漏了,不然就坑了...400.0 这样的整点坐标就没法读进来旋转!!!
        if box[i] >= w / 2 and box[i + 1] <= h / 2:
            print '1 xx'
            y = abs(math.sin(thta1 * math.pi / 180) * np.sqrt(pow(a, 2) + pow(b, 2)))
            x = abs(math.cos(thta1 * math.pi / 180) * np.sqrt(pow(a, 2) + pow(b, 2)))
            if flag == True: #顺时针
                if thta1 >= 0:
                    x = w / 2 + x
                    y = h / 2 - y
                else:
                    x = w / 2 + x
                    y = h / 2 + y
            else: #逆时针
                if thta1 < 90:
                    x = w / 2 + x
                    y = h / 2 - y
                else:
                    x = w / 2 - x
                    y = h / 2 - y
        if box[i] <= w / 2 and box[i + 1] >= h / 2:
            print '3 xx'
            y = abs(math.sin(thta1 * math.pi / 180) * np.sqrt(pow(a, 2) + pow(b, 2)))
            x = abs(math.cos(thta1 * math.pi / 180) * np.sqrt(pow(a, 2) + pow(b, 2)))
            if flag == True: #顺时针
                if thta1 >= 0:
                    x = w / 2 - x
                    y = h / 2 + y
                else:
                    x = w / 2 - x
                    y = h / 2 - y
            else: #逆时针
                if thta1 < 90:
                    x = w / 2 - x
                    y = h / 2 + y
                else:
                    x = w / 2 + x
                    y = h / 2 + y
        if box[i] <= w / 2 and box[i + 1] <= h / 2:
            print '2 xx'
            y = abs(math.sin(thta2 * math.pi / 180) * np.sqrt(pow(a, 2) + pow(b, 2)))
            x = abs(math.cos(thta2 * math.pi / 180) * np.sqrt(pow(a, 2) + pow(b, 2)))
            if flag == True: #顺时针
                if thta2 < 90:
                    x = w / 2 - x
                    y = h / 2 - y
                else:
                    x = w / 2 + x
                    y = h / 2 - y
            else: #逆时针
                if thta2 >= 0:
                    x = w / 2 - x
                    y = h / 2 - y
                else:
                    x = w / 2 - x
                    y = h / 2 + y
        if box[i] >= w / 2 and box[i + 1] >= h / 2:
            # print '4 xx'
            # print 'thta: ', thta
            # print 'thta2: ', thta2
            y = abs(math.sin(thta2 * math.pi / 180) * np.sqrt(pow(a, 2) + pow(b, 2)))
            x = abs(math.cos(thta2 * math.pi / 180) * np.sqrt(pow(a, 2) + pow(b, 2)))
            # print i, box[i], box[i + 1], x, y
            if flag == True: #顺时针
                if thta2 < 90:
                    x = w / 2 + x
                    y = h / 2 + y
                else:
                    x = w / 2 - x
                    y = h / 2 + y
            else: #逆时针
                if thta2 >= 0:
                    x = w / 2 + x
                    y = h / 2 + y
                else:
                    x = w / 2 + x
                    y = h / 2 - y
        if x < 0:
            x = 0
        if x > w:
            x = w
        if y < 0:
            y = 0
        if y > h:
            y = h
        newlabel.append(x)
        newlabel.append(y)
    return newlabel

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值