LabelImg标注的YOLO格式txt标签中心坐标和物体边界框长宽的转换

回答1: 将

的voc

文件,需要进行以下步骤: 1. 读取

文件中的

信息,包括目标类别、位置

等。 2. 根据

的要求,将目标位置

为相对于图像宽度和高度的比例。 3. 将目标类别

为对应的数字

,例如将”猫”

为””、”狗”

为”1″。 4. 将

信息按照

的要求,写入

文件中。 将

的voc

文件,需要进行以下步骤: 1. 读取

文件中的

信息,包括目标类别、位置

等。 2. 根据voc

的要求,将目标位置

为左上角和右下角的

值。 3. 将目标类别

为对应的文字

,例如将””

为”猫”、”1″

为”狗”。 4. 将

信息按照voc

的要求,写入

文件中。 以上是将

的voc

文件和

文件相互

的基本步骤,具体实现可以参考相关的代码库和工具。 ### 回答2:

是一种用于图像

的常用工具,支持输出多种

文件,其中包括voc

文件和

文件。这些

文件可以用于计算机视觉应用程序的训练和测试,因此在进行目标检测和

识别时非常重要。 在实际应用中,可能需要将

文件从一种

为另一种

。下面将介绍如何将

的voc

文件和

文件相互

: 1. 将voc

文件 将voc

文件需要执行以下步骤: (1)将

文件的路径保存到

文件中。在

文件的所在目录下创建一个

文件并将

文件的路径写入文件中。 (2)通过脚本来

文件。执行以下命令来

文件: python voc_

.py ./data/train/

/ ./data/train/Annotations/ ./data/train/ 在这里,”voc_

.py”是一个Python脚本名,将第一个参数设置为

生成的

文件所在的目录,将第二个参数设置为

文件所在的目录,将第三个参数设置为生成的

文件的输出目录。执行成功后,将在输出目录中生成与输入目录中的

文件对应的

文件。 2. 将

为voc

文件 将

为voc

文件需要执行以下步骤: (1)创建一个

文件并编写模板。在

文件所在的目录下,创建一个

文件并编写一个基本模板。在该模板中,应将

文件的基本信息包括图像名称、

区域的

、类别等一一列举出来。 (2)通过脚本来

文件。执行以下命令来

文件: python

.py train.

在这里,”train.

“是一个包含所有

路径的

文件。执行成功后,将在

文件所在目录中生成与输入目录中的

文件对应的voc

文件。 总之,无论是将voc

文件,还是将

为voc

文件,都可以通过执行特定的脚本来完成。这些脚本可以轻松地将

文件从一种

为另一种

,这对于计算机视觉应用程序的训练和测试来说是非常有用的。 ### 回答3:

是一款常用的图像

软件,VOC

文件是其默认输出

之一。而

则是另一种常见的目标检测算法,其

文件。在实际使用中,我们有时需要将

生成的VOC

文件,或者反过来。下面我们将介绍如何进行这一

。 1. VOC

文件 首先,我们需要明确VOC

文件中的类别名称和类别编号。以VOC

文件为例,打开其中一个文件,我们可以看到类别名称通常被定义为类别列表中的一个节点。而类别编号则是在每个object节点中定义的。可以参考下面的片段: 观察上面片段中的</p> <p>,我们可以发现该</p> <p>文件的类别名称为"cat"。而在

(xmin, ymin)和右下角

(xmax, ymax)。这些

值的单位都是像素。 有了这些信息之后,我们就可以将VOC

文件了。具体步骤如下: 1)读取VOC

文件,并提取出目标的类别、左上角

、右下角

等信息。 2)按照

要求,将

值归一化到[0, 1]的范围内,并计算出

和目标宽高。 3)将归一化后的

值和类别编号写入

文件。每行文件

如下: </p> <p>的归一化值,width和height是目标宽高的归一化值。 下面是实现该</p> <p>过程的Python代码示例: import os import

.etree.ElementTree as ET def convert_voc_to_

(voc_file, classes, out_file): “”” Convert a VOC format

file to

format. voc_file: path to the VOC format

file. classes: a dictionary mapping class names to class indices. out_file: path to save the converted

format

file. “”” tree = ET.parse(voc_file) root = tree.getroot() size = root.find(‘size’) w = int(size.find(‘width’).text) h = int(size.find(‘height’).text) with open(out_file, ‘w’) as f: for obj in root.iter(‘object’): cls_name = obj.find(‘name’).text if cls_name not in classes: continue cls_id = classes[cls_name] bbox = obj.find(‘bndbox’) xmin = int(bbox.find(‘xmin’).text) ymin = int(bbox.find(‘ymin’).text) xmax = int(bbox.find(‘xmax’).text) ymax = int(bbox.find(‘ymax’).text) x = (xmin + xmax) / 2 / w y = (ymin + ymax) / 2 / h width = (xmax – xmin) / w height = (ymax – ymin) / h f.write(f'{cls_id} {x:.6f} {y:.6f} {width:.6f} {height:.6f}\n’) classes = {‘cat’: 0, ‘dog’: 1, …} voc_file = ‘path/to/voc.

‘ out_file = ‘path/to/

‘ convert_voc_to_

(voc_file, classes, out_file) 2.</p> <p>为VOC</p> <p>文件 与上面的过程相反,我们同样需要先把类别名称和类别编号对应起来。由于</p> <p>文件中只保存了图片中的目标的位置及其类别信息,所以在进行</p> <p>时需要额外对目标进行分类。 具体步骤如下: 1)读入</p> <p>文件,提取出其中的目标位置信息以及类别编号。 2)将</p> <p>值从归一化范围</p> <p>为像素范围。 3)按照VOC</p> <p>的要求,将目标的类别、左上角</p> <p>、右下角</p> <p>等信息写入</p> <p>文件。 下面是代码示例: import os import

.etree.cElementTree as ET def convert_

_to_voc(

_file, classes,

_file, out_dir): “”” Convert a

format

file to VOC format

_file: path to the

format

file. classes: a dictionary mapping class names to class indices.

_file: path to the image file. out_dir: the output directory to save the VOC format

file. “”” root = ET.Element(‘annotation’) folder = ET.SubElement(root, ‘folder’) folder.text = os.path.basename(os.path.dirname(

_file)) filename = ET.SubElement(root, ‘filename’) filename.text = os.path.basename(

_file) source = ET.SubElement(root, ‘source’) database = ET.SubElement(source, ‘database’) database.text = ‘Unknown’ size = ET.SubElement(root, ‘size’)

_w,

_h,

_c = cv2.imread(

_file).shape width = ET.SubElement(size, ‘width’) width.text = str(

_w) height = ET.SubElement(size, ‘height’) height.text = str(

_h) depth = ET.SubElement(size, ‘depth’) depth.text = str(

_file, ‘r’) as f: for line in f.readlines(): parts = line.strip().split() cls_id = int(parts[0]) if cls_id not in classes: continue cls_name = classes[cls_id] x, y, width_norm, height_norm = map(float, parts[1:]) x1 = int((x – width_norm/2) *

_w) y1 = int((y – height_norm/2) *

_h) x2 = int(x1 + width_norm *

_w) y2 = int(y1 + height_norm *

h) object = ET.SubElement(root, ‘object’) name = ET.SubElement(object_, ‘name’) name.text = cls_name pose = ET.SubElement(object_, ‘pose’) pose.text = ‘Unspecified’ truncated = ET.SubElement(object_, ‘truncated’) truncated.text = ‘0’ difficult = ET.SubElement(object_, ‘difficult’) difficult.text = ‘0’ bndbox = ET.SubElement(object_, ‘bndbox’) xmin = ET.SubElement(bndbox, ‘xmin’) xmin.text = str(x1) ymin = ET.SubElement(bndbox, ‘ymin’) ymin.text = str(y1) xmax = ET.SubElement(bndbox, ‘xmax’) xmax.text = str(x2) ymax = ET.SubElement(bndbox, ‘ymax’) ymax.text = str(y2) out_

_file = os.path.join(out_dir, os.path.splitext(os.path.basename(

_file))[0] + ‘.

‘) tree = ET.ElementTree(root) tree.write(out_

_file) classes = {0: ‘cat’, 1: ‘dog’, …}

_file = ‘path/to/

file = ‘path/to/image.jpg’ out_dir = ‘path/to/output’ convert

_to_voc(

_file, classes,

_file, out_dir) ` 总之,在目标检测任务中,

数据的

是一个常见的问题。掌握对不同

数据的相互

,有利于提高我们的工作效率,也能为实现更加复杂和灵活的目标检测任务提供便利。

Original: https://blog.csdn.net/Keep_Trying_Go/article/details/128224748
Author: Keep_Trying_Go
Title: LabelImg标注的YOLO格式txt标签中心坐标和物体边界框长宽的转换

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/724988/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球