分割数据转类似DOTA的obb旋转框格式

分割数据集格式转DOTA_obb格式
分割数据集格式:
1.json
2.json

转DOTA格式:
1.txt
2.txt

import cv2
import numpy as np
import json
import os

rootdir = '/home/ai-i-zhangbo/obb_dataset/val2017/images'
def image_id(root_dir):
    a = []
    for parent,dirnames,filenames in os.walk(rootdir):
        for filename in filenames:
            filename=filename.strip('.png')
            print(filename)
            a.append(filename)
    return a

def convert_annotation(image_id):
    load_f=open("/home/ai-i-zhangbo/obb_dataset/val2017/annotation/%s.json"%(image_id),'r')
    load_dict=json.load(load_f)
    out_file=open('/home/ai-i-zhangbo/seg2obb/demotxt/%s.txt'%(image_id), 'w')
    bbox = []
    dict = {'1':'solar', '2':'cabin', '3':'sensor', '4':'antenna'}
    trans = load_dict['shapes']
    num = len(trans)
    for i in range(num):
        a = trans[i]
        cnt = a['points']
        classname = dict[a['label']]
        label_num = int(a['label'])
        cnt = np.float32(cnt)
        rect = cv2.minAreaRect(cnt)
        box = cv2.boxPoints(rect)
        box = np.int0(box)
        out_file.write(str(box)+'\n'+classname+" "+str(label_num)+'\n')
        bbox.append(box)
    ###读取图片并画图demo#############
    bgr_img = cv2.imread("/home/ai-i-zhangbo/obb_dataset/val2017/images/%s.png"%(image_id))
    for j in range(num):
        bgr_img = cv2.drawContours(bgr_img, [bbox[j]], 0, (0, 0, 255), 2)
    cv2.imwrite('/home/ai-i-zhangbo/seg2obb/demopic/%s.png'%(image_id), bgr_img)

names = image_id(rootdir)
for image_id in names:
    convert_annotation(image_id)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Open3D是一个开源的三维数据处理库,它提供了丰富的函数和算法来处理三维数据。在Open3D中,要分割OBB内的点,可以按照以下步骤进行操作: 1. 首先,我们需要导入Open3D库并读取包含点云数据的文件。可以使用open3d.io模块中的函数来实现这一步骤。例如,可以使用open3d.io.read_point_cloud()函数读取文件并返回点云对象。 2. 接下来,为了进行OBB(Oriented Bounding Box)分割,我们需要对点云进行处理。可以使用open3d.geometry模块中的函数来实现这一步骤。例如,可以使用open3d.geometry.OrientedBoundingBox()函数创建一个OBB对象,并使用open3d.geometry.crop_point_cloud()函数将点云中的点剪裁到OBB内。 3. 在进行剪裁之前,需要先确定OBB的位置和尺寸。可以使用open3d.geometry.get_oriented_bounding_box()函数来估计点云数据OBB。该函数将返回一个OBB对象,其中包含了OBB的位置和尺寸信息。 4. 确定OBB的位置和尺寸后,可以使用open3d.geometry.crop_point_cloud()函数来剪裁点云数据,仅保留内的点。该函数将返回一个新的点云对象,其中只包含OBB内的点。 5. 最后,可以将剪裁后的点云保存到文件中,以便后续使用。可以使用open3d.io模块中的函数来实现这一步骤。例如,可以使用open3d.io.write_point_cloud()函数将剪裁后的点云保存到指定文件。 综上所述,使用Open3D分割OBB内的点的步骤包括导入点云数据、创建OBB对象、剪裁点云数据,并将剪裁后的点云保存到文件中。这些步骤可以通过Open3D库中的相关函数来实现。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值