回答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/
转载文章受原作者版权保护。转载请注明原作者出处!