Python YOLOv5 txt标签转图像标签(多个标签
- txt的数据如图所示
-
- 1.读原始图像以及对应的txt文件
- 2.获得原始图像的大小
- 3.生成一张大小相同,黑色背景的图片
- 4.读取txt文件,循环的增加标签
- 5.获得不规则图形(标签)
- 6.完整代码
- 7.示例
txt的数据如图所示
这里每一行是一个标签,原始的图片如图所示
这里有五个龋齿
1.读原始图像以及对应的txt文件
我这里图像和txt的名称是相同的
def init_func():
# txt文件夹操作
folder_type = 'train'
# folder_type = 'val'
img_dir = '../teeth_data/' + folder_type + '/image'
txt_dir = '../teeth_data/' + folder_type + '/txt'
save_dir = '../teeth_data/' + folder_type + '/mask'
files = os.listdir(img_dir)
for file in files:
name = file[0:-4]
img_path = img_dir + '/' + name + '.png'
txt_path = txt_dir + '/' + name + '.txt'
这样我就能得到对应的图像和txt文件了,然后我需要获得原始图像的大小
2.获得原始图像的大小
img = cv2.imread(img_path) # 读取图片信息
img_x = img.shape[0]
img_y = img.shape[1]
3.生成一张大小相同,黑色背景的图片
img_save = np.zeros((img_x, img_y, 1)) # 黑色背景
4.读取txt文件,循环的增加标签
# 打开文件
file = open(txt_path, "r")
# 逐行读取文件内容
for line in file:
data = txt2mask_new(img_x, img_y, line) # 获得不规则图形
color = 225
cv2.fillPoly(img_save, # 原图画板
[data], # 多边形的点
color=color)
save_path = save_dir + '/' + name + '.png'
cv2.imwrite(save_path, img_save)
5.获得不规则图形(标签)
def txt2mask_new(img_x, img_y, line):
# 处理每一行的内容
data = line.split('\n')[0]
d = data.split(' ', -1)
# d[-1] = d[-1][0:-1]
data = []
for i in range(1, int(len(d) / 2) + 1):
data.append([img_y * float(d[2 * i - 1]), img_x * float(d[2 * i])])
data.append(data[0])
data = np.array(data, dtype=np.int32)
return data
这样就能实现所有功能啦!完整的代码如下:
6.完整代码
def txt2mask_new(img_x, img_y, line):
# 处理每一行的内容
data = line.split('\n')[0]
d = data.split(' ', -1)
# d[-1] = d[-1][0:-1]
data = []
for i in range(1, int(len(d) / 2) + 1):
data.append([img_y * float(d[2 * i - 1]), img_x * float(d[2 * i])])
data.append(data[0])
data = np.array(data, dtype=np.int32)
return data
def init_func():
# txt文件夹操作
folder_type = 'train'
# folder_type = 'val'
img_dir = '../teeth_data/' + folder_type + '/image'
txt_dir = '../teeth_data/' + folder_type + '/txt'
save_dir = '../teeth_data/' + folder_type + '/mask'
files = os.listdir(img_dir)
for file in files:
name = file[0:-4]
img_path = img_dir + '/' + name + '.png'
txt_path = txt_dir + '/' + name + '.txt'
img = cv2.imread(img_path) # 读取图片信息
img_x = img.shape[0]
img_y = img.shape[1]
img_save = np.zeros((img_x, img_y, 1)) # 黑色背景
# 打开文件
file = open(txt_path, "r")
# 逐行读取文件内容
for line in file:
data = txt2mask_new(img_x, img_y, line)
color = 225
cv2.fillPoly(img_save, # 原图画板
[data], # 多边形的点
color=color)
save_path = save_dir + '/' + name + '.png'
cv2.imwrite(save_path, img_save)
# 关闭文件
file.close()
if __name__ == '__main__':
init_func()
最终输出的图像如下: